[英]Jasmine: how to test a Promise.then block?
我想测试一个场景,我必须调用 function(从私有只读服务),其中有一个异步调用,然后一些变量正在更新等。
myFunction(param) {
this.myService
.serviceFunction(params)
.then((resp) => {
let someData = this.transformData(resp);
this.anotherFunction(someData);
if (param) {
// something
} else {
// something else
}
})
.catch((e) => {
// catching errors
});
}
在我的 spec.ts 中,我试图模拟 serviceFunction 调用,但看起来它甚至根本没有进入 the.then 块。
spyOn(myService, 'serviceFunction').and.returnValue(Promise.resolve(RESPONSE_MOCK));
expect(component.transformData).toHaveBeenCalled(); // won't work
你们有任何教程/信息来测试这种情况下的 the.then 块吗? 我没有足够的知识来自己解决这个问题。 任何建议,将不胜感激。
谢谢!
Angular 中有许多选项可用于测试异步代码。一些示例是async/await
、 fakeAsync/tick
和waitForAsync
。 我将向您展示async/await/fixture.whenStable()
和fakeAsync/tick
的示例。
异步/等待
it('does xyz', async () => {
spyOn(myService, 'serviceFunction').and.returnValue(Promise.resolve(RESPONSE_MOCK));
// do stuff
//
// Wait until all promises have resolved or rejected before continuing.
await fixture.whenStable();
expect(component.transformData).toHaveBeenCalled();
});
假异步/打勾
it('does xyz', fakeAsync(() => {
spyOn(myService, 'serviceFunction').and.returnValue(Promise.resolve(RESPONSE_MOCK));
// do stuff
//
// Wait until all promises have resolved or rejected before continuing.
tick();
expect(component.transformData).toHaveBeenCalled();
}));
您可以研究更多关于async/await/fixture.whenStable()
、 waitForAsync
和fakeAsync/tick
的信息。
问题未解决?试试以下方法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.