在我的组件中有两个不同的fetch调用
const fetchPopularCuisines = async() => {
const data = await fetch(URL2)
const jsonData = await data.json()
setPopularCuisines(jsonData?.data?.cards[1])
}
const fetchSuggestions = async() =>{
const data = await fetch(URL1)
const jsonData = await data.json()
setSearchResults(jsonData?.data?.suggestions)
}
我尝试使用RTL测试我的组件,代码如下:
// POPULAR_CUISINES_DATA is the data which the API gives when I call fetchPopularCuisines()
global.fetch = jest.fn(()=>{
return Promise.resolve({
json : () => Promise.resolve(POPULAR_CUISINES_DATA)
})
})
// testing the code for the first function above[fetchPopularCuisines()]
test('popular cuisines should render after making an API call', async ()=>{
const searchBar = render(
<Provider store={store}>
<SearchBar />
</Provider>
)
await waitFor(()=>{
const cuisinesList = searchBar.getAllByTestId('cuisines-list')
expect(cuisinesList.length).toBe(12)
} )
})
直到上面一切正常。现在,测试第二个函数[fetchSuggestions()]的代码会破坏代码,因为我不确定如何向fetch调用提供不同的数据,而不是POPULAR_CUISINES_DATA。我想传递变量SEARCH_RESULTS_DATA用于第二个fetch调用的模拟。
我该怎么做?
基本上,如果我有'n'个不同的fetch调用,我如何模拟它们并在每种情况下向Promise. resolve()提供自定义数据?
1条答案
按热度按时间prdp8dxp1#
你可以模仿fetch函数的实际实现,如下所述:https://jestjs.io/docs/mock-functions#mock-implementations
一些更详细的例子在这篇博客文章中:https://kentcdodds.com/blog/stop-mocking-fetch
你应该以这样的方式结束: