jhm*_*jhm 7 unit-testing jest react-native fetch-api
我在测试我的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));
};
Run Code Online (Sandbox Code Playgroud)
但是,我在所有需要FormData的测试中收到以下错误:
ReferenceError: FormData is not defined
Run Code Online (Sandbox Code Playgroud)
我试图从导入FORMDATA文件react-native-mock,下src/Libraries/Network/FormData,但没有奏效.
所以我想知道是否有人有这样的运气?
总的来说,我很难找到fetch在React Native中模拟请求的最佳方法,所以这里的任何建议都会很好.我已经尝试了jest-fetch-mocklib(并打开了一个关于FormData的问题),尝试设置nock(没有运气),这个简单的Jest实现,但还没有感觉到.
bru*_*nde 15
这是一个老问题,但是因为我已经在google的第一页找到了它,所以这就是我所做的:
在测试开始时我添加了:
function FormDataMock() {
this.append = jest.fn();
}
global.FormData = FormDataMock
Run Code Online (Sandbox Code Playgroud)
这将确保所有的地方
const formData = new FormData()
Run Code Online (Sandbox Code Playgroud)
将使用我的模拟.
当然,我只是嘲笑'追加'方法,因为在我的情况下,这是我唯一需要的东西.我正在测试的函数返回了创建的FormData对象,我这样做是为了测试是否所有工作都按预期工作:
const resultFormData = theFunction()
expect(resultFormData.append.mock.calls.sort(sortFunc)).toEqual(expected)
Run Code Online (Sandbox Code Playgroud)
这似乎适用于我的情况:
// @ts-ignore
global.FormData = require('react-native/Libraries/Network/FormData');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4349 次 |
| 最近记录: |