Есть разные способы подойти к этому.Обычно я люблю использовать шпионский объект, поскольку он позволяет мне настроить шпион для конкретной службы и возвращаемое значение для тестирования за один шаг.
В вашем коде было много ошибок (например, отсутствует) this.'перед вашим вызовом' testService.getTestOutputList () ', неправильное написание' takeUntil ', установка isLoading на тип' false 'вместо логического значения и т. д.), поэтому я предполагаю, что вы не копировали и не вставляли из рабочего кода.:)
Тем не менее, я исправил ошибки и поместил код в StackBlitz , чтобы продемонстрировать, как такой компонент можно протестировать.Из этого Stackblitz, вот описание, которое включает в себя шпион на сервис и тест, чтобы показать, что подписка Observable работает.
describe('MyTestComponent', () => {
let component: MyTestComponent;
let fixture: ComponentFixture<MyTestComponent>;
let service: TestService;
const serviceSpy = jasmine.createSpyObj('TestService', {
getTestOutputList : of(['the result'])
});
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [MyTestComponent],
providers: [
{ provide: TestService, useValue: serviceSpy }
]
}).compileComponents().then(() => {
service = TestBed.get(TestService);
fixture = TestBed.createComponent(MyTestComponent);
component = fixture.componentInstance;
});
}));
it('should create', () => {
expect(component).toBeTruthy();
});
it('should set this.testOutput properly if subscribe is working', () => {
fixture.detectChanges(); // Need this here to execute ngOnInit()
expect(component.testOutput).toEqual(['the result']);
});
});
Как вы можете видеть в StackBlitz, все тестыпрохождение.Надеюсь, это поможет.