9

我正在尝试使用 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 类确实使用了 fetch api(不是 vanilla xhr)。我认为它与试图模拟某些东西的玩笑有关,但还没有找到让它工作的方法。

提前致谢。

4

2 回答 2

3

就我而言,我没有测试搜索代码,而只是将它导入到我的代码路径中的某个位置,所以我决定只在文件中的全局级别模拟它(在测试运行时setup.js加载)。--require以下对我有用:

// needed in react-instantsearch
class XMLHttpRequest {}
global.XMLHttpRequest = XMLHttpRequest;
于 2017-07-07T15:27:38.793 回答
2

我在lokka使用XMLHttpRequest. 我做了一个模拟lokka,我的 api 包装类依赖于它。您可以尝试模拟您的 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');
    });
  }
}
于 2016-08-23T22:45:07.127 回答