【发布时间】:2015-03-03 08:15:51
【问题描述】:
我已经在单元测试中苦苦挣扎了 2 天,在异步测试方面我无法实现。我是单元测试新手,我不明白为什么这不起作用。
我有一个 login.js 文件,它调用 $.getJSON(url, data, function) 并返回一个带有登录状态(“成功”或“失败”)的字符串。 对 $.getJSON 的调用使用 mockjax 来获取数据(它包装了一个 ajax 调用)。
当使用 jQuery click 事件从测试网页调用登录功能时,登录功能正常。 但现在我正在尝试使用 Qunit 和 PhantomJS 运行无头测试。
问题似乎在于测试没有等待 $.getJSON 调用来获得结果(即使使用超时)。 有什么线索吗? 这是代码。
login.js
var login = function(user, pass){
$.getJSON("loginURL", {"user":user, "pass":pass}, function(response){
if(response.status === "success"){
//do something
return "success";
}
else{
//do something else
return "fail";
}
});
};
test.js
test("Test login", function(){
var user = "user1", pass = "pass1";
var done = assert.async();
var result = login(user, pass);
setTimeout(function(){
assert.equal(result, "success", "expect login succeded");
done();
},1000);
});
在我得到的测试结果中:
预期:“成功”
结果:未定义
【问题讨论】:
-
您的
login函数没有返回任何内容。所以result总是未定义是正常的。您在login函数中所做的只是调用$.getJSON,但您没有返回任何结果。在成功回调中,您尝试返回一些结果,但显然这并没有多大作用,因为没有人在阅读此结果。
标签: javascript unit-testing phantomjs getjson qunit