问题
我正在使用 Jasmine 运行 Javascript 测试和 Karma (作为测试运行者)。问题在于 Ajax
请求似乎无法正常工作。
如果我使用 Karma 运行以下 Jasmine 测试:
describe("Tests Ajax", function(done){
it("does not work", function(){
var options = {
"url": "http://www.google.com",
"method": "GET",
"complete": function(data){
console.log("Done!");
done();
}
};
$.ajax(options);
});
});
我收到以下 Karma 错误:
PhantomJS 1.9.8 (Windows 8) Tests Ajax does not work FAILED
Error: Timeout - Async callback was not invoked within timeout specified
by jasmine.DEFAULT_TIMEOUT_INTERVAL.
这意味着测试花费了很长时间。我尝试在 beforeEach
中将 jasmine.DEFAULT_TIMEOUT_INTERVAL
设置为更长的时间,但这并不会改变结果。
如果我在浏览器中运行上面的 Ajax 代码,它就会工作并输出“完成!”几乎立即。
以上结果让我得出结论,由于某种原因,当使用 Karma 运行 Jasmine 测试时,Ajax 请求不起作用。
其他信息
操作系统:Windows 8
Karma 测试浏览器:PhantomJS(我也用 IE、Chrome、ChromeCanary 和 Firefox 进行了测试,结果是一样的)
Karma 版本:0.12.31
karma Jasmine 版本:0.3.2
我选择不使用Jasmine Ajax因为我正在测试的代码涉及根据许多其他条件正确组合各种 Ajax 选项
,然后解释结果。因此完成一个真正的Ajax请求(到本地文件)是必要的。
最佳答案
为了解决这个问题,我决定使用 grunt-contrib-jasmine 运行测试。并在后台运行一个服务器来提供我的内容。
我用了grunt-http-server对于服务器。我在设置时遇到了两个问题。第一个是默认情况下 grunt-http-server
不允许跨源请求。要允许它们,您必须向 grunt 任务设置添加一个 headers
选项,其中包含以下 header :
{
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept'
}
我遇到的第二个问题是 grunt-http-server
在 body
字段中返回数据,但在 responseText
或 中返回数据>responseJSON
字段。
关于javascript - Jasmine 与 karma : Ajax not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27853117/