sau*_*ers 5 javascript reactjs jestjs axios
我一直在尝试编写测试以测试axios调用,但现在需要测试该catch部件。
我已经能够通过像这样模拟axios来做到这一点,但似乎无法找到一种方法来测试捕获。我遵循了许多来自堆栈溢出和网络的不同示例。
jest.mock('axios', () => jest.fn(() => Promise.resolve({ data: mockData })));
Run Code Online (Sandbox Code Playgroud)
但这总是会返回一个好的结果,因此无法测试捕获。我要测试的代码是:goToUrl()只是一个window.location.assign(url)但导入了。
fetchBundlesFromApi(params)
.then(({ data: { bundles } }) => {
updateBundles(bundles);
this.setState({ showUpdatingPrices: false });
})
.catch(() => goToUrl(bundlesUrl));
Run Code Online (Sandbox Code Playgroud)
在我的测试中,.then()我这样做:
const fetchedBundles = await fetchBundlesFromApi(
'?params',
);
expect(fetchedBundles.data).toEqual(mockData);
Run Code Online (Sandbox Code Playgroud)
但是,如果我遵循类似的示例,在React中使用Jestget模拟Axios- 不调用模拟功能,如果将模拟axios文件放在文件夹中,__mocks__则无法手动模拟,那么很多测试失败了,所以我只想模拟它在这个测试文件中。
这是我尝试执行的示例之一:
jest.mock('axios', () => ({
get: () => jest.fn(() => Promise.resolve({ data: mockData })),
default: () => jest.fn(() => Promise.resolve({ data: mockData })),
}));
Run Code Online (Sandbox Code Playgroud)
但是测试错误 TypeError: (0 , _axios.default) is not a function
编辑:
这是我的fetchBundlesApi函数:
const fetchBundlesFromApi = params => axios(`${bundleRoute}/bundles${params}`);
Run Code Online (Sandbox Code Playgroud)
编辑:赶上测试
it('should redirect if api fails', async () => {
const networkError = new Error('Some network error');
axios.mockRejectedValueOnce(networkError);
const goToUrl = jest.fn();
let error;
try {
await fetchBundlesFromApi('?params');
} catch (err) {
error = err;
}
expect(error).toEqual(networkError);
expect(goToUrl).toHaveBeenCalled();
});
Run Code Online (Sandbox Code Playgroud)
在我的组件中,我goToUrl像这样导入:
import { goToUrl } from 'Helpers';
您可以利用 Jests 功能在运行后弹出实现,即mockImplementationOnce和朋友。
import axios from 'axios';
jest.mock('axios');
// default implementation
axios.get.mockResolvedValue(mockedData);
describe('#fetchBundlesFromApi', () => {
it('returns data from API', async () => {
const fetchedBundles = await fetchBundlesFromApi('?params');
expect(fetchedBundles.data).toEqual(mockData);
});
it('redirects on failure', () => {
// override behaviour for this one call
axios.get.mockRejectedValueOnce();
// verify your failure test
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |