使用 jest 测试 react-native 应用程序时未定义 XMLHttpRequest

XMLHttpRequest is not defined when testing react-native app with jest

我正在尝试使用 jest(集成测试)在基于 react-native 的应用程序中测试 apiwrapper。 当我 运行 它在 iOs 模拟器中时一切 运行 都很好但是它不会 运行 我的笑话测试正确 - 我总是得到:

ReferenceError: XMLHttpRequest is not defined

当我尝试使用我的 api 包装器进行 运行 测试时,例如:

it('Login successful with correct data', () => {
  let api = Api.getInstance();
  return api.login("test", "testpass")
         .then(result => expect(result).toEqual('login_successful'));
});

我想在这里测试的 api class 确实使用了 fetch api(不是 vanilla xhr)。我认为它与试图嘲笑某些东西的玩笑有关,但还没有找到让它工作的方法。

提前致谢。

我在 lokka 使用 XMLHttpRequest 时遇到了类似的问题。我为 lokka 做了一个模拟,我的 api 包装器 class 依赖于它。您可以尝试模拟您的 api 包装器。

这就是我的 lokka 模拟现在的样子。当我开始测试错误处理时,我会添加更多内容。

export default class {
  query() {
    return new Promise(resolve => {
      resolve(200);
    });
  }
}

您可以使用类似的东西来模拟您的 api 包装器:

export default class Api {      
  getInstance() {
    \ However you implemented getInstance      
  }

  login(user, password) {
    return new Promise(resolve => {
      resolve('login_successful');
    });
  }
}

在我的例子中,我没有测试搜索代码,只是将它导入我的代码路径中的某处,所以我决定在 setup.js 文件中在全局级别模拟它(使用 --require 在测试中 运行)。以下对我有用:

// needed in react-instantsearch
class XMLHttpRequest {}
global.XMLHttpRequest = XMLHttpRequest;