reactjs - React Jest 中未定义 FormData
问题描述
我正在为 React 项目编写单元测试代码。我正在尝试测试一个功能
//function aa
export const login = (values) => async => (dispatch) => {
let bodyFormData = new FormData();
bodyFormData.append('username', values.login);
bodyFormData.append('password', values.password);
return await axios({
method: 'post',
url: url,
data: bodyFormData
}
}
//aa test
it("Login Action", async () => {
afterEach(() => {
store.clearActions();
});
const values = {
login: "aaaaa",
password: "bbbbb"
};
const expectedResult = { type: "LOGIN_PASS" };
const result = await store.dispatch(login(values));
expect(result).toEqual(expectedResult);
});
在浏览器中,这工作正常。但是在测试时我得到以下错误
ReferenceError:未定义 FormData
我尝试使用这个模块但没有运气...... https://www.npmjs.com/package/form-data
我不想只测试 axios,我需要测试完整的功能。
解决方案
您需要FormData
在单元测试中进行模拟,因为FormData
web API 在 node.js/jsdom 环境中不可用。
function FormDataMock() {
this.append = jest.fn();
}
global.FormData = FormDataMock
如果您希望在FormData
全局范围内模拟其他方法:
const entries = jest.fn()
global.FormData = () => ({ entries })
推荐阅读
- android - Room Sqlite 查询从保存为字符串的日期返回 unix 时间戳
- java - Rest API 请求参数和路径变量
- javascript - Laravel AJAX 响应时显示/隐藏按钮
- javascript - 如何使用内部具有条件语句的映射函数遍历对象数组?
- python - 将模块安装到虚拟环境后没有名为“xlsxwriter”的模块
- javascript - 如何在 vanilla JavaScript 中创建可重用的模式
- javascript - 纽约报告未上传到 TravisCI 构建中的 Codecov
- python - IBM Watson CPLEX 在求解 LP 文件时显示无变量、无解
- kubernetes - 将流量路由到副本集的特定 Pod
- arrays - 在 PowerShell 中控制函数返回的类型