我正在为具有承诺链的方法编写单元测试。
我想确保当promise解析时,我的进程函数被调用。当promise被拒绝时,我的handleError函数被调用。
如何模拟返回值以达到.then块?我不想打电话给服务方法。
//### inside my controller class
submitForm() {
this.myService.sendApiRequest(form, params)
.then((resp:IResp) => {
console.warn('inside .then');
this.processResponse(resp, form);
})
.catch((e:IServerError) => {
console.warn('inside .catch');
this.handleError(e);
});
}
这是我的规范
//### spec
describe('when the API call succeeds', function () {
beforeEach(function createSpies() {
spyOn(this.myService, 'sendApiRequest').and.returnValue($q.resolve({}));
spyOn(myMethod, 'processResponse');
});
it('should call the "processResponse" method', function () {
component.submitForm(this.form);
expect(
this.processResponse
)
.toHaveBeenCalled();
});
});
测试失败:
已经调用了预期的间谍程序响应。
我使用的是Typescript 2,Angular 1.5和Jasmine 2。
编辑:经常发生这种问题后,我想知道这个测试是否有用。我只是测试Angular的Promise实现是否有效?或者这是获得100%覆盖率的正确方法"对于方法?