Я использовал приведенный ниже подход для проверки отклоненных обещаний до угла 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.
Нужна помощь, чтобы понять разницу, пожалуйста ...