Функции callFake и returnValue Жасмина ведут себя по-разному для Angular $ q.reject - PullRequest
0 голосов
/ 07 июня 2019

Я использовал приведенный ниже подход для проверки отклоненных обещаний до угла 1,5.х. Обновление до 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();});

К моему удивлению, тест теперь начинает проходить ...

Я использую слово сюрприз, потому что согласно документации Jasmine, в этом случае не должно быть никакой разницы между returnValue и callFake.

Нужна помощь, чтобы понять разницу, пожалуйста ...

...