如何在Jasmine中模拟Promise返回值?

时间:2017-10-17 19:02:28

标签: javascript angularjs unit-testing typescript jasmine

我正在为具有承诺链的方法编写单元测试。

我想确保当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%覆盖率的正确方法"对于方法?

0 个答案:

没有答案