javascript - Jasmine 与 karma : Ajax not working

标签 javascript ajax jasmine karma-runner karma-jasmine

问题

我正在使用 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

Karma Config File
Github Repo

我选择不使用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-serverbody 字段中返回数据,但在 responseText 中返回数据>responseJSON 字段。

关于javascript - Jasmine 与 karma : Ajax not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27853117/

相关文章:

javascript - Jquery append with find不能一起工作

javascript - 如何防止提交表单并改为调用 jquery ajax

angular - RxJs - Jasmine 弹珠 forkJoin 操作符测试

javascript - 模板文字注入(inject)对象并传递给函数

javascript - 我正在复制 Javascript

javascript - 当溢出设置为滚动/自动时,位置粘性不适用于表头

javascript - 如何正确格式化使用 javascript 在服务器端传递的参数?

javascript - 使用 phantomjs 在本地文件上使用 extjs 代理进行 ajax 调用

javascript - karma : Cannot read property * of undefined

javascript - 如何更改 PrimeFaces onclick 按钮中的选项卡?