我尝试测试失败的承诺时,在测试中出现此错误:
在jasmine.DEFAULT_TIMEOUT_INTERVAL指定的超时时间内未调用异步回调
it('should fail on the getInfo request', function (done) {
SideCtrl.accInfo.getInfo.and.returnValue(Promise.reject({}));
SideCtrl.accInfo.getInfo().then(() => {}).catch(() => {
expect(SideCtrl.someMethod).toHaveBeenCalledWith({
first_name: '',
last_name: ''
});
done();
});
});
我做错了什么?
答案 0 :(得分:0)
你在SideCtrl.accInfo.getInfo()
的任何地方使用间谍吗?如果不是这可能是你的问题。您需要监视该函数并手动返回promise。这样的事情应该有效。
spyOn(SideCtrl.accInfo, 'getInfo').and.callFake(() => {
const deferred = $q.defer();
deferred.reject({});
return deferred.promise;
});
你也可以这样做
beforeEach(angular.mock.inject(_$q_) => {
const getInfoDeferred = $q.defer();
spyOn(SideCtrl.accInfo, 'getInfo').and.returnValue(getInfoDeferred.promise);
}
it('should fail on the getInfo request', function (done) {
SideCtrl.accInfo.getInfo();
getInfoDeferred.reject({});
$rootScope.$digest();
expect(SideCtrl.someMethod).toHaveBeenCalledWith({
first_name: '',
last_name: ''
});
done();
});
});
您需要启动摘要周期才能获得返回的承诺。您可以致电$rootScope.$apply()
或$rootScope.$digest()
。