[英]How to test retries to an API call using testcafe
我正在使用 Testcafe 进行集成测试,并且我想测试我的应用程序在收到错误后重试 API 调用的场景。 我正在使用 async-retry 库来拨打电话。 Retry
是我创建的用于包装 API 调用的实用程序,因此我可以包装样板代码以调用 async-retry:
const response = await Retry( () => { return fetch( buildUrl(env, csrf, '/api/myCustomCall', queryParams), options ); }, 'getRecommendations', { onRetry: () => { console.log('RETRYING'); } } );
对于后代,这是Retry
实用程序:
import retry, { AsyncRetryOptions } from 'async-retry'; export const Retry = ( func: () => Promise<any>, name: string, opts: AsyncRetryOptions = {} ): Promise<any> => { const retryOptions = { retries: opts.retries || 3, factor: opts.factor || 2, minTimeout: opts.minTimeout || 3000, maxTimeout: opts.maxTimeout || Infinity, randomize: opts.randomize || true, onRetry: (error: Error, attempt: number) => { console.error( `${new Date().toString()} - ${name} failed ${attempt} times, trying again` ); } }; return retry(func, retryOptions); };
这是我的测试:
test.requestHooks( RequestMock() .onRequestTo(/myCustomCall/) .respond({ error: 'Bad value for request parameter' }, 400, responseHeaders) )('Recommendation request retries 3 times', async (t) => { await playgroundInit(t); await t.expect(recommendationLogger.requests.length).eql(4); });
playgroundInit
是一个实用函数,它可以执行诸如登录和导航到我正在测试的页面之类的操作。 我在开发的时候,为了测试重试,使用了 Chrome devtools 来阻止 API 请求,成功了。 我看到重试工作。 但是,我想在我的测试中模仿这一点来自动化这种行为。 您如何在 testcafe 中模拟请求以触发重试?
据我了解,您是从 TestCafe 测试代码而不是从测试页面进行 API 调用。
在这种情况下,将不应用 RequestMock 机制。 RequestMock 使用从网站页面进行的 API 调用。 在您的情况下,您自己发起请求,因此 TestCafe 代理不会处理它。
如果您希望 RequestMock 工作,您可以尝试从浏览器而不是测试端进行 API 调用。 为此,您可以使用允许您将 JS 代码注入网站页面的 ClientFunction 机制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.