React Native - 在单元测试中模拟 FormData

2024-05-21

我在测试我的 thunk 时遇到问题,因为我的许多 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.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

我尝试从以下位置导入 FormData 文件react-native-mock, under src/Libraries/Network/FormData,但没有成功。

所以我想知道是否有人有幸这样做?

总的来说,我很难找出嘲笑的最佳方式fetchReact Native 中的请求,所以这里的任何建议都会很好。我已经尝试过jest-fetch-mocklib(并提出了有关 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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React Native - 在单元测试中模拟 FormData 的相关文章

随机推荐