我在测试我的thunk时遇到了问题,因为我的许多API调用都在使用FormData,而我似乎不知道如何在测试中模拟这一点。我使用的是Jest。
我的设置文件如下所示:
import 'isomorphic-fetch';
// Mocking the global.fetch included in React Native
global.fetch = jest.fn();
// Helper to mock a success response (only once)
fetch.mockResponseSuccess = body => {
fetch.mockImplementationOnce(() =>
Promise.resolve({ json: () => Promise.resolve(JSON.parse(body)) })
);
};
// Helper to mock a failure response (only once)
fetch.mockResponseFailure = error => {
fetch.mockImplementationOnce(() => Promise.reject(error));
};但是,我在所有需要FormData的测试中都得到了以下错误:
ReferenceError: FormData is not defined我尝试过在src/Libraries/Network/FormData下从react-native-mock导入FormData文件,但没有成功。
所以我想知道是否有人有幸做到这一点?
总的来说,我很难找出在React Native中模拟fetch请求的最好方法,所以这里的任何建议都会很好。我已经尝试了Jest (并打开了一个关于FormData的问题),尝试使用nock进行设置(不太走运),以及这个简单的jest-fetch-mock实现,但是感觉还没有什么是正确的。
发布于 2017-10-26 01:19:52
这是一个古老的问题,但由于我在google的第一页找到了它,下面是我所做的:
在我的测试开始时,我添加了:
function FormDataMock() {
this.append = jest.fn();
}
global.FormData = FormDataMock这将确保所有这样做的地方
const formData = new FormData()将使用我的模拟。
当然,我只是嘲笑了“append”方法,因为在我的例子中,它是我唯一需要的东西。我测试的函数返回了创建的FormData对象,我这样做是为了测试是否一切都像预期的那样工作:
const resultFormData = theFunction()
expect(resultFormData.append.mock.calls.sort(sortFunc)).toEqual(expected)发布于 2017-12-13 17:55:24
将以下代码添加到测试文件的开头
global.FormData = require('FormData')或
在你的package.json中有类似这样的东西
{
"jest": {
"preset": "react-native",
"transformIgnorePatterns": [
"<rootDir>/node_modules/(?!react-native|tcomb-form-native|ReactUtils|react-native-button)"
],
"automock": false,
"setupFiles": [
"./setupJest.js"
]
}
}然后在package.json所在的文件夹中创建一个setupJest.js文件,并在其中包含以下代码
global.FormData = require('FormData')以便jest在每次jest运行测试时调用setupJest.js
https://stackoverflow.com/questions/45842088
复制相似问题