如何在赛普拉斯中跳过某些规范文件的support / index.js

时间:2019-01-11 09:26:36

标签: cypress

是否可以跳过我的Cypress index.js 支持文件中的某个特定规范文件(access.spec.js)中的beforeEach功能?

index.js

// This example support/index.js is processed and
// loaded automatically before your test files.

beforeEach(function () {
  cy.request('POST', 'https://exampleURL.com', {
    email: 'email',
    password: 'password'
  }).then((response) => {
    cy.setCookie('accessToken', response.body.AccessToken);
  });

  cy.setCookie('email', 'email');
  cy.setCookie('environment', '3');
  cy.setCookie('name', 'name');
}

access.spec.js

it("it should send user back to login screen when AccessToken is missing", () => {
  // Code here
});

1 个答案:

答案 0 :(得分:2)

从传统的角度来看, support / index.js 中的beforeEach块应仅具有适用于 all 测试规范的代码。如果逻辑仅与某些测试有关,而与其他测试无关,则不应将其放在 support / index.js 中。

试图覆盖赛普拉斯打算如何使用 support / index.js 是针对框架而不是针对框架。

随后,在需要此测试的所有测试中复制此beforeEach逻辑的另一种方法是创建一个Custom Command,如下所示:

Cypress.Commands.add('login', () => {
  cy.request('POST', 'https://exampleURL.com', {
    email: 'email',
    password: 'password'
  }).then((response) => {
    cy.setCookie('accessToken', response.body.AccessToken);
  });

  cy.setCookie('email', 'email');
  cy.setCookie('environment', '3');
  cy.setCookie('name', 'name');
})

...然后,从需要此功能的规范中,您可以有一个更简单的beforeEach块,如下所示:

beforeEach(function() {
  cy.login();
});

但是,鉴于您的 access.spec.js 测试与缺少的accessToken有关,您将不会在该特定测试中使用beforeEach块。而是将登录代码复制到该测试中,并使用cy.route而不是cy.request(它会到达您的实际端点),以便您可以stub out不返回{{ 1}}。