Unit testing React Native-在单元测试中模拟FormData
我在测试我的thunks时遇到了问题,因为我的许多API调用都使用FormData,我似乎不知道如何在测试中模拟它。我在开玩笑 我的安装文件如下所示:Unit testing React Native-在单元测试中模拟FormData,unit-testing,react-native,fetch-api,jestjs,Unit Testing,React Native,Fetch Api,Jestjs,我在测试我的thunks时遇到了问题,因为我的许多API调用都使用FormData,我似乎不知道如何在测试中模拟它。我在开玩笑 我的安装文件如下所示: import 'isomorphic-fetch'; // Mocking the global.fetch included in React Native global.fetch = jest.fn(); // Helper to mock a success response (only once) fetch.mockRespons
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中模拟
获取请求的最佳方法,所以这里的任何建议都很好。我尝试了jest-fetch-mock
lib(并打开了一个关于FormData的问题),尝试了使用nock
进行设置(运气不好),以及这个简单的jest实现,但感觉还不太对劲 这是一个老问题,但自从我在谷歌的第一页找到它以来,我做了如下工作:
在测试开始时,我添加了:
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)
将以下代码添加到测试文件的开头
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"
]
}
}
因此,jest
每次运行测试时都会调用setupJest.js
,您是否找到了适合您的解决方案?还没有,不幸的是,您是否能够将此解决方案与使用FormData.append的已安装外部库一起使用?在我的简单测试中,我尝试将上面的FormDataMock
代码添加到之前的,但是,我仍然从项目中使用的库中获取FormData未定义。谢谢。我只使用本地代码测试了它,没有使用外部库。你试图测试的库是什么?库是,尽管我实际上不想自己测试它。这导致我的基本测试失败,可能只是因为它是我的React原生项目中的一个依赖项???您是否尝试在导入任何其他库之前添加global.FormData=…
?在导入任何其他库之前添加global.FormData=…
对我不起作用。最终起作用的是:jest.mock('react-native-aws3',()=>{return{Request:{FormData:{}})代码>。我不确定这是否是正确的做法,因为看起来我必须为我的许多依赖项这样做。
global.FormData = require('FormData')