[英]Why does fetch call with Formdata empty map in testing fetch call using react?
[英]Testing FormData submitted to fetch using jest
我正在使用Jest測試在我的React應用程序中調用API。
我正在測試的代碼是:
const createItem = (data) => {
let formData = buildForm(data);
return fetch(URL, {
method: 'POST',
body: formData
});
};
我想確認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
});
});
});
問題是,無論我在測試中附加到expForm
哪些字段,該測試都通過。 似乎toHaveBeenCalledWith
實際上並沒有比較body
的值,而只是檢查它是否是FormData
對象。
如何測試傳遞到body
FormData對象中的值?
您可以將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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.