Карма выделить подписаться - PullRequest
0 голосов
/ 03 сентября 2018

Вот мой код компонента. Я пытаюсь добиться полного покрытия кода, но четвертая строка была выделена res => { this.days = res.

Вот код, добавленный для услуги Подробнее

constructor(public detailsService:DashboardService ) {
   this.csvContent = '';
}

public getNonDealingDates() {
  try {
    this.detailsService.nonDealingdates().subscribe(
      res => { this.days = res },
      error => { throw error; }
    );
  } catch(excep){ }
}

Вот мой тестовый блок.

it('should get non dealing dates ',() => {
  component.getNonDealingDates;
  expect(component.getNonDealingDates()).toBeUndefined();
})

Нужно ли включать макет для подписки. Помогите мне как сделать макет для приведенного выше кода

1 Ответ

0 голосов
/ 03 сентября 2018

Я предполагаю, что ваш компонент выглядит следующим образом.

import { Component } from '@angular/core';
import { DetailsService } from 'path/to/your/service';

@Component({
  selector: 'app-your-component-name',
  styleUrls: ['./app-your-component-name.css'],
  templateUrl: './app-your-component-name.html'
})
export class YourComponent { 

public days: any; // replace any with the correct data type.

 constructor(private detailsService: DetailsService) {}

  public getNonDealingDates() {
    try {
      this.detailsService.nonDealingdates().subscribe(
        res => {
        this.days = res
        }, error => {
          throw error;
        });
    } catch (excep) {

    }
  }
}

И для такого класса мы можем написать такой тестовый модуль.

import { Input, NO_ERRORS_SCHEMA } from '@angular/core';

import { Subject } from 'rxjs/internal/Subject';

import { DetailsService } from 'path/to/your/service';
import { YourComponent } from 'path/to/your/component';


describe('YourComponent tests', () => {
    let fixture: ComponentFixture<YourComponent>;
    let component: YourComponent;

    let detailsService: DetailsService;
    let spyDetailsService: jasmine.SpyObj<DetailsService>;

    let subject;

    const response: any = {};

    beforeEach(async(() => {
      subject = new Subject();

      spyDetailsService = jasmine.createSpyObj('DetailsService', ['nonDealingdates']);
      spyDetailsService.nonDealingdates.and.returnValue(subject.asObservable());

      TestBed.configureTestingModule({
        declarations: [YourComponent],
        providers: [
          { provide: DetailsService, useValue: spyDetailsService }
        ],
        schemas: [NO_ERRORS_SCHEMA]
      }).compileComponents().then(() => {
        fixture = TestBed.createComponent(YourComponent);
        component = fixture.componentInstance;

        detailsService = TestBed.get(DetailsService);
      });
    }));

    afterEach(() => {
      subject = null;
    });

    describe('#getNonDealingDates tests', () => {
      it('Should set the days to the value returned by the detailsService.nonDealingdates()', () => {
        component.getNonDealingDates();
        subject.next(response);

        expect(component.days).toEqual(response);
      });
    });
});

Здесь я предоставил поддельную услугу как DetailsService.

spyDetailsService = jasmine.createSpyObj('DetailsService', ['nonDealingdates']);

Я создал объект spyObject с использованием метода jasmine.createSpyObject.

И взгляните на массив провайдеров.

providers: [
          { provide: DetailsService, useValue: spyDetailsService }
        ],

Вместо того, чтобы предоставлять фактическую услугу, я предоставил макет объекта.

Поскольку метод nonDealingdates вашей службы сведений возвращает наблюдаемое, я перенастраиваю объект как наблюдаемый в методе службы с поддельными данными.

spyDetailsService.nonDealingdates.and.returnValue(subject.asObservable());

И когда вы тестируете метод getNonDealingDates, вы должны вызывать subject.next() с ответом сервиса в качестве параметра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...