Javascript 用Jest测试XHR

Javascript 用Jest测试XHR,javascript,xmlhttprequest,jestjs,Javascript,Xmlhttprequest,Jestjs,我有一个简单的测试用例: describe ('Request', function () { it ('should perform a XHR "GET" request', function (done) { var xhr = new XMLHttpRequest; xhr.open('GET', 'http://google.com', true); xhr.send(); }); }); 关键是:当我在终端中做玩笑时,似乎它没有请求http://g

我有一个简单的测试用例:

describe ('Request', function () {
  it ('should perform a XHR "GET" request', function (done) {
    var xhr = new XMLHttpRequest;

    xhr.open('GET', 'http://google.com', true);
    xhr.send();
  });
});
关键是:当我在终端中做
玩笑时,似乎它没有请求
http://google.com
。我认为这是因为Jest使用了UndertheHood,它没有能力从浏览器本身复制HTTP请求

建议


注意:出现任何错误,测试通过,但未提出请求。

存在许多问题:

  • 在代码示例中,不创建XMLHttpRequest的实例。它应该是这样的:
    var xhr=new-XMLHttpRequest()
  • 在测试中提出真正的请求是个坏主意。如果您的模块依赖于来自远程服务器的数据,您应该使用或使用“假服务器”(例如)。我强烈建议你不要在测试中提出真正的要求

  • 我假设您不打算进行单元测试,而是打算创建某种类型的集成测试,或者希望为正在调用的API编写测试

    在这两种情况下,您都必须为全局范围提供XMLHttpRequest对象,因为它不存在于node js(运行测试代码的平台)中

    您可以通过安装此软件包来完成此操作:

    然后在任何测试之前运行此代码:

    global.XMLHttpRequest=require(“XMLHttpRequest”).XMLHttpRequest

    你也不能为了这个目的使用jest,而使用chakram或frisby,它们都是为API测试而构建的,并且都会为你提出请求