使用 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;
我正在尝试使用 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;