Как пропустить support/index.js для определенных spec-файлов в Cypress

Можно ли пропустить beforeEach функция в моем файле поддержки Cypress index.js, для определенного файла спецификации (access.spec.js)?

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 ответ

С обычной точки зрения, beforeEach Блок в support/index.js должен иметь только тот код, который применяется ко всем спецификациям теста. Если логика относится только к одним тестам, а не к другим, ее не следует помещать в support/index.js.

Попытка переопределить то, как Cypress намеревается использовать support/index.js, работает против фреймворка, а не с ним.

Впоследствии, альтернатива дублированию этого beforeEach Логика во всех тестах, которые в этом нуждаются, заключается в создании пользовательской команды, например так:

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 (который достигает вашей фактической конечной точки), так что вы можете заглушить ответ, который не возвращает accessToken,

Другие вопросы по тегам