我已经使用以下代码测试以下代码示例。
function loadAccounts() {
return AccountCaller.loadAccounts()
.then(function(response){
AccountsModel.accounts = response.accounts;
})
.catch(function(error){
ErrorHandler.raise(error);
});
}
var spy= spyOn(mock, 'loadAccounts').andCallFake(function () {
return {
then: function (callback) {
return callback(response);
}
};
});
上面的代码在'.then'上运行正常,但我最近引入了'.catch',现在我的测试失败'TypeError:无法读取属性'catch'of undefined'。
关于我如何处理'.catch'元素的任何想法,如果我删除它然后代码测试运行正常!!!
干杯
答案 0 :(得分:4)
在then
的间谍中,你有return callback(response);
,但你的回调不会返回任何内容,这就是你错误中undefined
的原因。您返回的内容至少需要附加某种catch
方法。您可以使用以下内容进行测试:
var spy= spyOn(mock, 'loadAccounts').andCallFake(function () {
return {
then: function (callback) {
callback(response);
return {catch: function() {}};
}
};
});
^^这不一定是我怎么做的,但它应该让你朝着正确的方向前进。请考虑返回包含在callback(response)
中的Promise
的结果。