所以我正在创建一个服务,它向后端发送一条消息,检查数据库中是否已有特定的电子邮件地址。
userDB.emailExists = function()
{
var returnVal;
$http.get('?backend=users&email=myemail%40mydomain.com')
.success(function(data) { returnVal = data.count ? true : false; })
.error(function(data) { /* TODO error handling */ });
returnVal = data.count ? true : false;
});
return returnVal;
};
现在,对此进行的单元测试(测试函数是否返回true
或false
)与Expected undefined to be truthy.
失败。我想我明白了;作为承诺只返回一个'占位符'所以当我们到达'return'语句时,returnVal
尚未设置。
唯一的问题是,我不知道如何解决这个问题;我不想返回承诺,因为当结果是简单的真或假
时,这似乎是一个不必要的复杂层答案 0 :(得分:3)
唯一的问题是,我不知道如何解决这个问题;我不想回复承诺,因为当结果是简单的真或假时,这似乎是一个不必要的复杂层
你有来返回承诺(或接受回调) - 这只是在Angular和浏览器JavaScript中的异步i.o中进行编码的方式。请参阅this question for the conceptual explanation。
从概念上讲,您所说的复杂性已经存在,因为您的函数在概念上不会返回true / false,它会执行网络请求并根据其结果返回true / false。
但是,您应该 - 返回true/false
值的承诺和不 $http
请求:
userDB.emailExists = function() {
return $http.get('?backend=users&email=myemail%40mydomain.com')
.then(function(r) { return Boolean(r.data.count); });
};