Я предполагаю, что ваш компонент выглядит следующим образом.
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()
с ответом сервиса в качестве параметра.