Моя цель - выполнить успешное модульное тестирование и выявить ошибки функции getData()
. В случае успеха должна быть вызвана функция this.success
. В случае ошибки должна быть вызвана функция this.failure
.
export class MyComponent implements OnInit {
constructor() {}
ngOnInit() {
this.getData();
}
getData(): void {
this.myService.getServiceData().subscribe(
//returns an observable
(result) => {
this.success(result);
},
error => {
this.failure(error);
}
);
}
}
Это мой модульный тест:
describe('MyComponent', () => {
let component = MyComponent;
let fixture: ComponentFixture<MyComponent>;
let myService = jasmine.SpyObj<MyServiceClass>;
beforeEach(async(()=> {
myService = jasmine.createSpyObj('MyServiceClass', ['getServiceData']);
TestBed.configureTestingModule({
providers: [
{ provide: MyServiceClass, useValue: myService }
]
}).compileComponents();
fixture = TestBed.createComponent(MyComponent);
component = fixture.componentInstance;
}));
it('should call success function', async(() => {
spyOn(component, 'success');
myService.getServiceData.and.returnValue(asyncData(myMockObj));
component.getData();
//fails. If I expect failure() to be called, it ALSO fails!
expect(component.success).toHaveBeenCalled();
}));
})
Функция asyncData выглядит так:
export function asyncData<T>(data: T) {
return defer(() => Promise.resolve(data));
}
Почему происходит сбой и как я могу проверить эти два случаи?