我正在使用Jest测试一些API端点,但是这些端点可能会在某些时候失败,因为网络问题而不是我的程序错误。所以我想延迟多次(例如5次)再次测试,如果所有这些尝试都失败了,Jest应该报告失败。实现这一点的最佳方法是什么?Jest或其他库提供了解决方案吗?或者我应该用setInterval之类的东西编写自己的程序?
setInterval
wnrlj8wa1#
对于测试来说,你不应该进行网络调用,因为它们会减慢你的测试速度。此外,你可能会与一个外部API进行通信,而这个外部API不应该是你测试代码的一部分。这也会导致你已经观察到的假阴性。你可以做下面这样的事情:
async function getFirstMovieTitle() { const response = await axios.get('https://dummyMovieApi/movies'); return response.data[0].title; }
字符串为了测试上面的网络调用,你应该在测试中模拟你的axios get请求。
jest.mock('axios'); it('returns the title of the first movie', async () => { axios.get.mockResolvedValue({ data: [ { title: 'First Movie' }, { title: 'Second Movie' } ] }); const title = await getFirstMovieTitle(); expect(title).toEqual('First Movie'); });
型试着多读一些关于嘲笑的笑话,以便更好地理解
blpfk2vs2#
我原则上同意Ujwal所说的,但有时你必须做你必须做的,对吗?在each测试文件中,在下面插入一行以允许多次尝试。该行应在任何特定测试之外(即describe(...)或it(...)之外)
describe(...)
it(...)
jest.retryTimes(1);
字符串参考:https://stackoverflow.com/a/71599782/6217734
2条答案
按热度按时间wnrlj8wa1#
对于测试来说,你不应该进行网络调用,因为它们会减慢你的测试速度。此外,你可能会与一个外部API进行通信,而这个外部API不应该是你测试代码的一部分。这也会导致你已经观察到的假阴性。你可以做下面这样的事情:
字符串
为了测试上面的网络调用,你应该在测试中模拟你的axios get请求。
型
试着多读一些关于嘲笑的笑话,以便更好地理解
blpfk2vs2#
我原则上同意Ujwal所说的,但有时你必须做你必须做的,对吗?
在each测试文件中,在下面插入一行以允许多次尝试。该行应在任何特定测试之外(即
describe(...)
或it(...)
之外)字符串
参考:https://stackoverflow.com/a/71599782/6217734