如何针对真实 API 重用模拟 Cypress 测试 运行?
How to reuse mocked Cypress tests to run against real APIs?
我使用 cy.intercept
.
对本地 mocks/fixtures 进行了 Cypress 测试 运行
我想将这些测试 运行 重新用于生产 URL 并禁用网络拦截,以便测试 运行 针对真实 API。
这些是禁用所有 cy.intercept
的方法吗,还是我想错了方向?
有一个插件“cypress-skip-test”。可以根据 OS、浏览器或环境变量跳过测试或代码块。假设您将拦截器设置在 before 或 beforeEach 中,您可以在拦截器调用周围放置一个“onlyOn”或“skipOn”。根据“生产”环境,您可以跳过拦截器的设置。
您致电:
CYPRESS_ENVIRONMENT=production npx cypress run
然后你跳过:
beforeEach(() => {
skipOn('production', () => {
cy.intercept(...);
})
});
- 有关插件的更多信息,请参阅:cypress-skip-test
- 特别是关于设置环境,请参阅:ENVIRONMENT
Intercepted Requests section 将帮助您实现这一点,但您可能需要重写 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()
。
我使用 cy.intercept
.
我想将这些测试 运行 重新用于生产 URL 并禁用网络拦截,以便测试 运行 针对真实 API。
这些是禁用所有 cy.intercept
的方法吗,还是我想错了方向?
有一个插件“cypress-skip-test”。可以根据 OS、浏览器或环境变量跳过测试或代码块。假设您将拦截器设置在 before 或 beforeEach 中,您可以在拦截器调用周围放置一个“onlyOn”或“skipOn”。根据“生产”环境,您可以跳过拦截器的设置。
您致电:
CYPRESS_ENVIRONMENT=production npx cypress run
然后你跳过:
beforeEach(() => {
skipOn('production', () => {
cy.intercept(...);
})
});
- 有关插件的更多信息,请参阅:cypress-skip-test
- 特别是关于设置环境,请参阅:ENVIRONMENT
Intercepted Requests section 将帮助您实现这一点,但您可能需要重写 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()
。