在加载时,组件中的useEffect调用axios.get来检索它在页面上显示的用户数据。
我试图在开玩笑地复制这种行为,但我一直陷入困境,数据键显示为未定义。
下面是我正在测试的组件的useEffect:
useEffect(() => {
axios({
url: `/user/fav_numbers`,
method: 'GET',
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
},
})
.then(response => {
// troubleshooting for jest test
console.log('GET: ', response);
const { numbers } = response.data;
setFavNumbers(numbers);
})
.catch(response => {
// troubleshooting for jest test
console.log('GET error', response);
setShowError(true);
});
}, []);
db返回一个包含numbers数组的对象,数组中的每一项都是一个带有id、user_id、num和reason键的对象,如下所示:
data: { numbers: [ {id: 0, user_id: 1, num: 7, reason: 'traditional lucky number'} ] }
这稍后被呈现给用户。
下面是我的Jest测试:
const mockedResponseDate = {
numbers: [ { id: 0, user_id:1, 'number: 7, reason: 'test reason' ],
};
const mockResponse = config => {
// later will need method to test for GET or POST
const { method, url } = config;
if (url === '/user/fav_numbers') {
return {
status: 200,
data: mockedResponseDate,
};
}
};
jest.mock('packs/axios', () => jest.fn(config => mockResponse(config)));
test('Display initial numbers from db', async () => {
render(<favNumbers userId={1}/>);
await waitFor(() => {
screen.debug();
});
});
当我运行此命令时,在控制台中出现以下网络错误:
config: {
url: '/user/fav_numbers',
method: 'get',
headers: { Accept: 'application/json' },
transformRequest: [ [Function: transformRequest] ],
transformResponse: [ [Function: transformResponse] ],
timeout: 0,
adapter: [Function: xhrAdapter],
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN',
maxContentLength: -1,
maxBodyLength: -1,
validateStatus: [Function: validateStatus],
transitional: {
silentJSONParsing: true,
forcedJSONParsing: true,
clarifyTimeoutError: false
},
data: undefined
},
request: XMLHttpRequest {},
response: undefined,
isAxiosError: true,
toJSON: [Function: toJSON]
}
我完全不知道为什么,所以任何帮助都将不胜感激。如果你还需要什么就告诉我,我想我已经把所有相关的信息都包括在内了。
1条答案
按热度按时间dxxyhpgq1#
从技术上讲,这不是一个修复,但它导致了代码的工作,并为我提供了预期的结果。
因此,我没有创建一个模拟响应对象,而是简单地使用了.mockReturnedValue({})函数,然后在其中传递数据、错误和加载状态。
这不完全是我想要的,因为它不太现实,但它确实意味着我的测试现在通过了,我可以工作,让这种其他方式的测试运行。