我有一个功能
getList() {
return this.listFactory
.fetchList()
.then((data) => this.generateDsisplay(data));
}
并且已经嘲笑fetchList
返回
mocktListRepository.fetchList.and.returnValue(PromiseUtil.transformAsResolvedPromise(listPage));
但是在我的单元测试中仍然失败。我不知道为什么。测试将调用generateDsisplay
describe('getList()', () => {
it('should call generateDsisplay', () => {
spyOn(component, 'generateDsisplay');
component.getList();
expect(component.generateDsisplay).toHaveBeenCalled();
});
});
答案 0 :(得分:0)
在您的单元测试中,异步方法调用this.listFactory.fetchList()
需要进行同步。使用fakeAsync
中的tick
和@angular/core/testing
,可以按照以下步骤进行操作。
import { fakeAsync, tick} from '@angular/core/testing';
describe('getList()', () => {
it('should call generateDsisplay', fakeAsync(() => {
spyOn(component, 'generateDsisplay');
component.getList();
tick();
expect(component.generateDsisplay).toHaveBeenCalled();
}));
});
或者,您也可以按以下方式尝试async/await
。
describe('getList()', () => {
it('should call generateDsisplay', async () => {
spyOn(component, 'generateDsisplay');
await component.getList();
expect(component.generateDsisplay).toHaveBeenCalled();
});
});
再次使用done
回调。
describe('getList()', () => {
it('should call generateDsisplay', (done) => {
spyOn(component, 'generateDsisplay');
component.getList()
.then(data => {
expect(component.generateDsisplay).toHaveBeenCalled();
done();
})
.catch(err => fail(err));
});
});