XMLHttpRequest未定义,angular mock-ajax不会通过源代码监听ajax调用吗?

时间:2016-09-28 16:51:02

标签: javascript jasmine protractor

我正在使用jasmine测试我的前端以及量角器,我想模拟一些服务器响应。我目前正在努力使jasmine-ajax工作,我在收听正在进行的ajax调用时遇到问题。

我认为问题源于mock-ajax文件无法访问XMLHttpRequest对象。

我得到getJasmineRequireObj()和XMLHttpRequest是未定义的错误,所以我通过添加

来修复它
global.XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;

直接到mock-ajax.js源文件。

然而,这个修复并没有解决我想要做的事情。

从测试规范中,我可以检测到ajax调用:

使用:

require('../mock-ajax.js');
...
it ('should allow admin to delete user', function () {

    var xhr = new XMLHttpRequest();

    xhr.open("GET", "/users");
    xhr.send();

    page.deleteButton.click();

    expect(jasmine.Ajax.requests.mostRecent()).toBeDefined(true);
    var request = jasmine.Ajax.requests.mostRecent();
    request.respondWith({
    "status": 200,
    "contentType": 'application/json',
    "responseText": 'hello'
    });

    expect(request.method).toBe('GET');
});

不工作:

require('../mock-ajax.js');
...
it ('should allow admin to delete user', function () {
    page.deleteButton.click();

    expect(jasmine.Ajax.requests.mostRecent()).toBeDefined(true);
    var request = jasmine.Ajax.requests.mostRecent();
    request.respondWith({
    "status": 200,
    "contentType": 'application/json',
    "responseText": 'hello'
    });

    expect(request.method).toBe('DELETE');
});

page.deleteButton.click();从浏览器发出ajax调用,但是没有从jasmine.Ajax.requests.mostRecent()中检测到此调用。

如何让茉莉花检测在测试规范之外进行的ajax调用,或者这是不可能的?是不是因为我使用量角器,茉莉花无法检测到浏览器中的调用?另外,我没有jasmine specRunner.html,我的文件目录是大型项目的一部分,因此它可能不适合用于查找源文件的jasmine文件结构;但是,我使用的是量角器,所以我不确定这是不是一个问题。

1 个答案:

答案 0 :(得分:0)

有一个项目jasmine-ajax旨在帮助您满足您的需求。