Cypress:如何通过检查 URL 有条件地跳过测试

Dom*_* M. 3 cypress

如果 URL 包含“xyz”,如何有条件地跳过测试?在 QA 环境“abc”中运行的某些测试不应在生产“xyz”环境中运行。

我还没有找到有条件地检查环境以触发测试的好例子。需要动态检查 baseURL,并且最好在 beforeEach 中跳过测试。

运行赛普拉斯 6.2.0

beforeEach(() => {
    login.loginByUser('TomJones');
    cy.visit(`${environment.getBaseUrl()}${route}`);
 });

it('test page', function () {
     if environment.getBaseUrl().contains("xyz")
       then *skip test* 
     else
       cy.intercept('GET', '**/some-api/v1/test*').as('Test'););     
       cy.get('#submitButton').click();
})
Run Code Online (Sandbox Code Playgroud)

潜在的解决方案(经过测试并成功尝试):我通过 CLI 使用了过滤(分组)和文件夹结构的组合,我设置了文件夹 /integrations/smokeTest/QA 和 /integrations/smokeTest/Prod/

1.QA Test Run: 
  npm run *cy:filter:qa* --spec "cypresss/integration/smokeTests/QA/*-spec.ts"

2.Run All (both QA and PROD tests)
  npm run cypress:open --spec "cypresss/integration/smokeTests/*/*-spec.ts"

3. Prod Test Run: 
npm run cy:filter:prod --spec "cypresss/integration/smokeTests/PROD*/*-spec.ts"



Run Code Online (Sandbox Code Playgroud)

Sch*_*iff 5

通常,我不会仅仅为了执行一个 Cypress 命令而编写自定义命令,但在这种情况下,获取全局测试上下文很有用this

使用function回调的形式与自定义命令允许访问this,然后您可以自由地在测试本身上使用箭头函数。

Cypress.Commands.add('skipWhen', function (expression) {
  if (expression) {
    this.skip()
  }
})

it('test skipping with arrow function', () => {

  cy.skipWhen(Cypress.config('baseUrl').includes('localhost'));

  // NOTE: a "naked" expect() will not be skipped
  // if you call your custom command within the test
  // Wrap it in a .then() to make sure it executes on the command queue

  cy.then(() => {
    expect('this.stackOverflow.answer').to.eq('a.better.example')
  })
})
Run Code Online (Sandbox Code Playgroud)