Как пропустить 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
,