Javascript 不履行承诺的角度检验
我正试图检验一个失败的承诺Javascript 不履行承诺的角度检验,javascript,angularjs,unit-testing,angular-promise,httpbackend,Javascript,Angularjs,Unit Testing,Angular Promise,Httpbackend,我正试图检验一个失败的承诺 service 'resolveService' function: return {resolveRedirect: function(){ var deferred = $q.defer(); $http.jsonp('randomUrl') .then(function(response){ json
service 'resolveService' function:
return {resolveRedirect: function(){
var deferred = $q.defer();
$http.jsonp('randomUrl')
.then(function(response){
jsonpResponse.responseHandler(response.data);
deferred.resolve(1);
}, function(err){
jsonpResponse.responseHandler({});
deferred.resolve(err);
});
return deferred.promise;
},
}
我希望测试是一个失败的承诺,并写了以下内容:
spyOn(jsonpResponse,'responseHandler');
$httpBackend.expectJSONP('randomUrl').respond(400, {});
var promise = resolveService.resolveRedirect();
var result;
promise.then(function(data){
console.log('we are in success');
expect(true).toEqual(false);
},function(err){
console.log('we are in error');
result = err;
expect(result).toEqual(err);
});
$httpBackend.flush();
expect(jsonpResponse.responseHandler).toHaveBeenCalledWith({});
运行此测试时,它失败的原因是说expect(true).toEqual(false)代码>是错误的。控制台还告诉我,这个承诺确实成功了,并提示“我们成功了”。编辑:它转到错误的块。它应该进入“我们错了”
我错在哪里?由于我预计会出现400错误
,承诺应该失败,测试应该通过?当然,它会在这条线上抛出一个错误-真怎么可能等于假?承诺永远不会达到这一部分,因为我预计它会失败。因此,它应该直接转到“我们错了”部分。但它永远不会出现在那里,而是出现在“成功”块中。@Dribel在拒绝中更改deferred.resolve(err)
到deferred.reject(err)
section@KrzysztofSafjanowski太好了,行得通。谢谢然而,我必须解决这个承诺,我不能拒绝它(这是需要解决的resolve block it$状态的一部分)。还有别的办法吗?对不起,我刚知道@KrzysztofSafjanowski再次感谢。当然,这会在这条线上抛出一个错误-真的怎么可能等于假?承诺永远不应该达到这一部分,因为我预计它会失败。因此,它应该直接转到“我们错了”部分。但它永远不会出现在那里,而是出现在“成功”块中。@Dribel在拒绝中更改deferred.resolve(err)
到deferred.reject(err)
section@KrzysztofSafjanowski太好了,行得通。谢谢然而,我必须解决这个承诺,我不能拒绝它(这是需要解决的resolve block it$状态的一部分)。还有别的办法吗?对不起,我刚知道@KrzysztofSafjanowski再次感谢你。