Lon*_*Dev 2 javascript reactjs jestjs
我正在使用 Jest 测试在我的 React 应用程序中调用 API。
我正在测试的代码是:
const createItem = (data) => {
let formData = buildForm(data);
return fetch(URL, {
method: 'POST',
body: formData
});
};
Run Code Online (Sandbox Code Playgroud)
我想确认该buildForm函数正确地将 转换data为FormData对象。
我的测试是这样的:
it('creates item using api', () => {
let data = {name: 'test name'};
return createItem(data)
.then(() => {
let expForm = new FormData();
expForm.append('name', data.name);
expect(global.fetch).toHaveBeenCalledWith(URL, {
method: 'POST',
body: expForm
});
});
});
Run Code Online (Sandbox Code Playgroud)
问题是,无论我expForm在测试中附加了哪些字段,此测试都会通过。似乎toHaveBeenCalledWith实际上并没有比较 的值,body只是检查它是否是一个FormData对象。
如何测试传递给bodyFormData 对象的值?
您可以将 FormData 条目转换为一个对象以便于比较。
expect(global.fetch).toHaveBeenCalledWith(
URL,
expect.objectContaining({ method: 'POST', body: expect.any(FormData) })
);
const formData = Array.from(global.fetch.calls[0][1].body.entries())
.reduce((acc, f) => ({ ...acc, [f[0]]: f[1] }), {});
expect(formData).toMatchObject(data);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4144 次 |
| 最近记录: |