cy.fixture() является встроенным методом Cypress,
предназначенным для работы с фикстурными данными — заранее
подготовленными файлами, содержащими тестовые данные в формате JSON,
текст, CSV или других поддерживаемых форматах. Этот метод позволяет
отделять данные теста от его логики, обеспечивая более чистый, повторно
используемый и масштабируемый код тестов.
Фикстуры размещаются в папке cypress/fixtures. Каждый
файл может содержать данные в формате JSON или текстовые данные.
Структура JSON-файла может быть произвольной, но рекомендуется
использовать объектное представление, чтобы легко обращаться к отдельным
элементам данных.
Пример файла user.json:
{
"name": "Иван",
"email": "ivan@example.com",
"roles": ["admin", "editor"]
}
Файл message.txt может содержать простой текст:
Привет, это тестовое сообщение.
cy.fixture()Метод cy.fixture() возвращает объект
Cypress.Chainable, который позволяет использовать результат
асинхронно через .then() или присвоить алиас через
.as() для дальнейшего использования в тестах.
Пример использования:
cy.fixture('user').then((user) => {
expect(user.name).to.equal('Иван')
expect(user.roles).to.include('admin')
})
В этом примере Cypress загружает данные из файла
cypress/fixtures/user.json и передает объект в колбэк.
Для удобного повторного использования данных можно присвоить фикстуре алиас:
cy.fixture('user').as('userData')
cy.get('@userData').then((user) => {
cy.log(`Email пользователя: ${user.email}`)
})
Алиасы позволяют обращаться к данным через @имяАлиаса в
любом месте теста или в хуках before,
beforeEach.
Важно учитывать, что cy.fixture() возвращает цепочку
Cypress, а не сам объект сразу. Прямое присваивание значения переменной
вне .then() не сработает:
let userData
cy.fixture('user').then((data) => {
userData = data
})
// console.log(userData) здесь будет undefined
Правильный способ — работать с данными внутри .then()
или через алиасы.
cy.fixture() часто используется для отправки
подготовленных данных в POST или PUT запросах:
cy.fixture('user').then((user) => {
cy.request({
method: 'POST',
url: '/api/users',
body: user
}).then((response) => {
expect(response.status).to.eq(201)
})
})
Это позволяет тестировать API с заранее определенными данными, не завися от случайного ввода.
Можно загружать фикстуры динамически, используя переменные:
const fileName = 'user'
cy.fixture(`${fileName}.json`).then((data) => {
cy.log(data.email)
})
Это удобно при тестировании с множеством наборов данных или при параметризованных тестах.
Cypress поддерживает загрузку не только JSON. Текстовые файлы можно использовать следующим образом:
cy.fixture('message.txt').then((text) => {
expect(text).to.contain('тестовое сообщение')
})
Для CSV или других форматов фикстуры можно обрабатывать вручную после загрузки.
before и beforeEachДля повторного использования данных удобно загружать фикстуры в хук
before или beforeEach:
beforeEach(() => {
cy.fixture('user').as('userData')
})
it('проверка имени пользователя', function() {
expect(this.userData.name).to.equal('Иван')
})
Использование function() вместо стрелочной функции
необходимо для корректного доступа к контексту this, где
сохраняются алиасы.
users.json, products.json,
messages.txt).before для
оптимизации тестов.chai
(deep.equal, include.keys).cy.fixture() является ключевым инструментом Cypress,
позволяющим отделять данные тестирования от логики, повышая читаемость,
поддержку и повторное использование тестов. Его правильное использование
обеспечивает стабильность и предсказуемость автоматизированных
проверок.