我使用以下方法来测试被拒绝的承诺,直到角度为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之间应该没有区别。
需要帮助以了解区别...