3

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

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();
  });
});

关键是:当我jest在我的终端上做时,似乎它没有请求http://google.com. 我认为这是因为 Jest 在后台使用jsdom并且它无法从浏览器本身重现 HTTP 请求。

建议?

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

4

2 回答 2

2

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

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

你可以通过安装这个包来做到这一点: https ://www.npmjs.com/package/xmlhttprequest

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

global.XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;

您也不能为此目的使用 jest 并使用 chakram 或 frisby,两者都是为 API 测试而构建的,并且都负责为您发出请求。

于 2017-04-09T01:16:01.783 回答
1

有很多问题:

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