Jasmine with Karma:Ajax 不工作
Jasmine with Karma: Ajax not working
问题
我正在使用 Jasmine and Karma(作为测试运行器)运行 Javascript 测试。问题是 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 代码,它会工作并输出“完成!”几乎立即。
以上结果使我得出结论,出于某种原因,Ajax 请求在使用 Karma 运行 Jasmine 测试时不起作用。
附加信息
操作系统: Windows 8
Karma 测试浏览器:PhantomJS(我也用 IE、Chrome、ChromeCanary 和 Firefox 测试过,结果是一样的)
业力版本:0.12.31
业力茉莉版本:0.3.2
我选择不使用 Jasmine Ajax,因为我正在测试的代码涉及根据许多其他条件正确组合各种 Ajax options
,然后解释结果。因此需要完成一个真正的 Ajax 请求(到本地文件)。
为了解决这个问题,我决定 运行 使用 grunt-contrib-jasmine 进行测试,并让服务器 运行 在后台为我的内容提供服务。
服务器我用了grunt-http-server。设置时我 运行 遇到了 2 个问题。首先是默认情况下 grunt-http-server
不允许跨源请求。要允许它们,您必须使用以下 headers:
向 g运行t 任务设置添加 headers
选项
{
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept'
}
我遇到的第二个问题是 grunt-http-server
returns 数据在 body
字段中没有,但在 responseText
或 responseJSON
字段中。
问题
我正在使用 Jasmine and Karma(作为测试运行器)运行 Javascript 测试。问题是 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 代码,它会工作并输出“完成!”几乎立即。
以上结果使我得出结论,出于某种原因,Ajax 请求在使用 Karma 运行 Jasmine 测试时不起作用。
附加信息
操作系统: Windows 8
Karma 测试浏览器:PhantomJS(我也用 IE、Chrome、ChromeCanary 和 Firefox 测试过,结果是一样的)
业力版本:0.12.31
业力茉莉版本:0.3.2
我选择不使用 Jasmine Ajax,因为我正在测试的代码涉及根据许多其他条件正确组合各种 Ajax options
,然后解释结果。因此需要完成一个真正的 Ajax 请求(到本地文件)。
为了解决这个问题,我决定 运行 使用 grunt-contrib-jasmine 进行测试,并让服务器 运行 在后台为我的内容提供服务。
服务器我用了grunt-http-server。设置时我 运行 遇到了 2 个问题。首先是默认情况下 grunt-http-server
不允许跨源请求。要允许它们,您必须使用以下 headers:
headers
选项
{
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept'
}
我遇到的第二个问题是 grunt-http-server
returns 数据在 body
字段中没有,但在 responseText
或 responseJSON
字段中。