Я хочу создать функцию, чтобы избежать повторения кода на Cypress.
Задача:
Мне нужно войти в систему с разными типами пользователей (с разнымиразрешения) и хотите проверить, какой тип пользователя получает ошибку «403 Forbidden» на желаемом пути.Поскольку у меня 6 типов пользователей и 11 разных путей, приведенный ниже код повторяется для каждого отдельного пользователя / пути, что меня не устраивает.
cy.visit('/abc')
.get('[data-qa="http-error.section"]')
.should('exist')
.contains('403')
.visit('/def')
.get('[data-qa="http-error.section"]')
.should('exist')
.contains('403')
.get('[data-qa="logout"]')
.click()
Как я могу создать функцию, что-то вродеcheck403 (), и реализовать набор элементов управления внутри него?Чтобы код выглядел так:
cy.visit('/abc')
.check403()
.visit('/def')
.check403()
.get('[data-qa="logout"]')
.click()
Если я смогу создать что-то подобное, я смогу удалить огромное количество повторяющегося кода.
Что япопробовал:
- Я попытался создать пользовательскую команду Cypress, но она не сработала.
- Я попытался создать функцию, переместил ее за пределы реального регистра и вызвалэто похоже на
cy.check403()
, но затем я получил cy.check403() is not a function
ошибку на Cypress.
Обновление
Я определил всех пользователей внутри users.json
впапка со светильниками.Я вхожу в систему с каждым отдельным пользователем и делаю все остальное.Мой код находится под afterlogin.spec.js
.
Вот полный код, но слишком долго для выполнения такой основной задачи.Может быть, это поможет:
it('Unauthorized users are redirected to a 403 page', () => {
cy.fixture('users.json').then(users => {
cy.login(
users[Cypress.env('ENVIRONMENT')].driver,
Cypress.env('DEFAULT_USER_PASSWORD')
).then(response => {
cy.setCookie('__bl_pp__', response.body.result.access_token)
.visit('/me')
.get('[data-qa="roles"]')
.contains('driver')
.visit('/offers')
.get('[data-qa="http-error.section"]')
.should('exist')
.contains('403')
.get('[data-qa="back-to-homepage"]')
.should('exist')
.visit('/drivers')
.get('[data-qa="http-error.section"]')
.should('exist')
.contains('403')
.get('[data-qa="logout"]')
.click()
cy.login(
users[Cypress.env('ENVIRONMENT')].dispatcher,
Cypress.env('DEFAULT_USER_PASSWORD')
).then(response => {
cy.setCookie('__bl_pp__', response.body.result.access_token)
.visit('/me')
.get('[data-qa="roles"]')
.contains('dispatcher')
.visit('/offers')
.get('[data-qa="http-error.section"]')
.should('exist')
.contains('403')
.get('[data-qa="logout"]')
.click()
cy.login(
users[Cypress.env('ENVIRONMENT')].provider,
Cypress.env('DEFAULT_USER_PASSWORD')
).then(response => {
cy.setCookie('__bl_pp__', response.body.result.access_token)
.visit('/me')
.get('[data-qa="roles"]')
.contains('provider')
.visit('/planned')
.get('[data-qa="http-error.section"]')
.should('exist')
.contains('403')
.visit('/finished')
.get('[data-qa="http-error.section"]')
.should('exist')
.contains('403')
.get('[data-qa="logout"]')
.click()
cy.login(
users[Cypress.env('ENVIRONMENT')].reviewer,
Cypress.env('DEFAULT_USER_PASSWORD')
).then(response => {
cy.setCookie('__bl_pp__', response.body.result.access_token)
.visit('/me')
.get('[data-qa="roles"]')
.contains('reviewer')
.visit('/offers')
.get('[data-qa="http-error.section"]')
.should('exist')
.contains('403')
.visit('/planned')
.get('[data-qa="http-error.section"]')
.should('exist')
.contains('403')
.get('[data-qa="logout"]')
.click()
cy.login(
users[Cypress.env('ENVIRONMENT')].admin,
Cypress.env('DEFAULT_USER_PASSWORD')
).then(response => {
cy.setCookie('__bl_pp__', response.body.result.access_token)
.visit('/me')
.get('[data-qa="roles"]')
.contains('admin')
.visit('/offers')
.get('[data-qa="http-error.section"]')
.should('exist')
.contains('403')
.visit('/planned')
.get('[data-qa="http-error.section"]')
.should('exist')
.contains('403')
.visit('/finished')
.get('[data-qa="http-error.section"]')
.should('exist')
.contains('403')
.get('[data-qa="logout"]')
.click()
})
})
})
})
})
})