Jasmine的callFake和returnValue函数对于Angular $ q.reject的行为有所不同

时间:2019-06-07 13:52:44

标签: angularjs spy jasmine2.0 angular1.6

我使用以下方法来测试被拒绝的承诺,直到角度为1.5.x。更新到1.7.5引入了“可能未处理的拒绝”错误。

describe('TestTarget', () => {
    let $q, $rootScope, TestTarget, SomeModel;

    beforeEach(() => {
        SomeModel = jasmine.createSpyObj('SomeModel', ['get']);

        module('something');
        module($provide => {
            $provide.value('SomeModel', SomeModel);
        });

        inject((_$q_, _$rootScope_, _TestTarget_) => {
            $q = _$q_;
            $rootScope = _$rootScope_;
            TestTarget = _TestTarget_;
        });
    });

    describe('get()', () => {
        it('on error, adds a danger message', () => {
            SomeModel.get.and.returnValue($q.reject());
            // SomeModel.get.and.throwError(); // doesn't work either
            TestTarget.get();
            $rootScope.$digest();
            expect(SomeModel.get).toHaveBeenCalled();
            expect(<< the rejection outcome of TestTarget.get().then() >>);
        });
    });
});

但是,如果我只是从此更改代码:

SomeModel.get.and.returnValue($q.reject());

对此:

SomeModel.get.and.callFake(function(){return $q.reject();});

令我惊讶的是,现在测试通过了...

我使用的是Surprise一词,因为根据Jasmine文档,在这种情况下returnValue和callFake之间应该没有区别。

需要帮助以了解区别...

0 个答案:

没有答案