如何重用模拟的 Cypress 测试来针对真实 API 运行?
2021-12-11
416
我使用
cy.intercept
在本地 mocks/fixtures 中运行 Cypress 测试。
我想重复使用这些测试来针对生产 URL 运行,并禁用网络拦截,以便测试针对真实 API 运行。
这些是禁用所有
cy.intercept
的方法吗,还是我的想法错了?
2个回答
拦截的请求部分
将帮助您实现此目的,但您可能必须重写
cy.intercept()
调用。
如前所述,您需要使用 routeHandler 将条件应用于存根或不存根 api 调用。
cy.intercept('GET', '/yourEndpoint', (req) => {
if (Cypress.config('baseUrl') === 'prodUrl') {
req.continue();
} else {
req.reply(your stub here);
}
});
编辑:cy.intercept() 覆盖的示例
我想您正在使用以下
cy.intercept()
签名之一:
在这种情况下,您需要使用
Cypress.Commands.overwrite()
将您的
staticResponse
变量转换为
routeHandler
回调,最终得到以下之一:
以下是第二个签名
(method, url, staticResponse)
的示例:
Cypress.Commands.overwrite('intercept', (originalFn, method, url, staticResponse) => {
originalFn(method, url, (req) => {
if (Cypress.config('baseUrl') === 'prodUrl') {
req.continue();
} else {
req.reply(staticResponse);
}
});
});
如果您使用多个签名,您需要一个逻辑来接受 2 个或 3 个参数并将它们相应地映射到
originalFn()
。
PeaceAndQuiet
2021-12-15
有一个插件“ Cypress-Skip测试”。根据OS,浏览器或环境变量,可以跳过测试或代码块。假设您将拦截器设置为之前或之前的拦截器,则可以在拦截器呼叫周围放置“ Onlyon”或“ Skipon”。根据环境“生产”,您会跳过拦截器的设置。
您致电:
615445144
,然后跳过:
829198797
- 有关插件的更多信息,请参见: cypress-skip-test
- ,尤其是关于设置环境,请参见: 环境
Michael K.
2021-12-15