我有我试图用茉莉花单元测试一个很简单的功能负荷()。 this.service.loadObject()返回一个承诺。
如何测试,如果承诺被拒绝this.logService.error会叫什么名字?
load() {
this.service.loadObject().then(x => {
this.variable = x;
}).catch(ex => this.logService.error(ex));
}
我有我试图用茉莉花单元测试一个很简单的功能负荷()。 this.service.loadObject()返回一个承诺。
如何测试,如果承诺被拒绝this.logService.error会叫什么名字?
load() {
this.service.loadObject().then(x => {
this.variable = x;
}).catch(ex => this.logService.error(ex));
}
像这样的东西应该工作:
it("should catch the error", done => {
spyOn(service, "loadObject").and.returnValue(Promise.reject("test error"));
spyOn(logService, "error"); // Might need to mock this method too
load();
setTimeout(() => {
expect(logService.error).toHaveBeenCalledWith("test error");
done();
});
});
我在做setTimeout
这里,因为承诺异步拒绝。 但是,角有这样做的,如果你需要的更清洁的方式。
编辑 :使用我没有测试过这一点,但基于以下链接, fakeAsync
连同要么tick
或flushMicroTasks
应该工作:
https://www.joshmorony.com/testing-asynchronous-code-with-fakeasync-in-angular/ https://alligator.io/angular/testing-async-fakeasync/
it("should catch the error", fakeAsync(() => {
spyOn(service, "loadObject").and.returnValue(Promise.reject("test error"));
spyOn(logService, "error"); // Might need to mock this method too
load();
// One of these
// flushMicroTasks();
// tick();
expect(logService.error).toHaveBeenCalledWith("test error");
}));