开发者问题收集

如何重用模拟的 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
Michael K.
2021-12-15