我有一个关于这个代码的问题:
import useCountry from './useCountry';
import { renderHook } from '@testing-library/react-hooks';
import { enableFetchMocks } from 'jest-fetch-mock';
enableFetchMocks();
it('should make proper api call', async () => {
const resultCountries = {
PL: 'Poland',
CA: 'Canada',
};
jest.spyOn(global, 'fetch').mockImplementation(() =>
Promise.resolve({
json: () => Promise.resolve(resultCountries),
} as Response),
);
const expected = [
{ code: 'PL', name: 'Poland' },
{ code: 'CA', name: 'Canada' },
];
const { result, waitForNextUpdate } = renderHook(() => useCountry());
await waitForNextUpdate();
expect(fetch).toHaveBeenCalled();
expect(result.current).toEqual(expected);
});
删除as Response
时,我收到此Typescript警告:
TS2345:类型"()=〉Promise〈{json:()=〉承诺〈{PL:字符串; CA:字符串;}〉;}〉'不能赋值给类型'的参数(输入?:弦|请求|未定义,姓名首字母缩写?:请求初始化|未定义)=〉承诺'。 键入"承诺〈{json:()=〉承诺〈{PL:字符串; CA:字符串;}〉;"}〉"不能赋给类型" Promise "。 键入"{json:()=〉承诺〈{PL:字符串; CA:字符串;}〉;"}"缺少类型" Response "的以下属性:报头、ok、redirected、status以及其他11个。
我想问一下如何正确地模拟fetch
,因为这个as Response
感觉像是一个糟糕的实践。
1条答案
按热度按时间cqoc49vn1#
我在模拟
fetch
函数时遇到了这个问题,只是在.test.tsx
中添加了以下代码。