我有一个功能
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();
});
});
异步方法调用this.listFactory.fetchList()
需要在单元测试中同步。使用fakeAsync
中的tick
和@angular/core/testing
,可以执行以下操作。
import { fakeAsync, tick} from '@angular/core/testing';
describe('getList()', fakeAsync(() => {
it('should call generateDsisplay', () => {
spyOn(component, 'generateDsisplay');
component.getList();
tick();
expect(component.generateDsisplay).toHaveBeenCalled();
}));
});
或者,您也可以如下尝试async/await
。
describe('getList()', async () => {
it('should call generateDsisplay', () => {
spyOn(component, 'generateDsisplay');
await component.getList();
expect(component.generateDsisplay).toHaveBeenCalled();
});
});