#laravel #relationship #cypress
#laravel #отношения #cypress
Вопрос:
Можно ли использовать cypress для тестирования взаимосвязи между моделями?
Например, у меня такие отношения: у учителя много учеников, каждый ученик принадлежит учителю. После того, как преподаватель вошел в систему по URL «/ my-students», он или она увидит список всех своих учеников.
Я хочу проверить, чтобы убедиться, что ни один из учеников, перечисленных на странице «/ my-students», не принадлежит учителю B, а не учителю A.
Могу ли я протестировать этот случай с помощью cypress? Возможно ли это и как это сделать, если это возможно?
Комментарии:
1. Пробовали ли вы иметь список ожидаемых учащихся и просто проверять, соответствуют ли отображаемые учащиеся списку?
Ответ №1:
Короткий ответ «да», вы абсолютно можете выполнить такое тестирование. Есть десятки способов, но я собираюсь предложить то, что я считаю самым простым подходом.
- Убедитесь, что данные, используемые вашим сайтом, не меняются. Вы хотите, чтобы ваши тесты были детерминированными … ничто из этого не запускает запрос к базе данных для определения ожидаемых результатов.
- При первом просмотре проверьте содержимое страницы вручную
- Используется
cy.snapshot()
для записи текущего состояния страницы для последующего сравнения. Это дополнительный пакет npm от Глеба Бахмутова (разработчика Cypress). Полные инструкции, включая установку, можно найти здесь.
Ваш гипотетический тест будет выглядеть примерно так:
describe('student directory page', () => {
beforeEach(() => {
// Log in
cy.logIn('lizstewart@example.com') // This is usually a custom command; up to you
})
it('displays the correct students', () => {
// Go to the page
cy.visit('my-students')
// Check for the correct students
cy.get('#studentList').snapshot()
})
})
При первом запуске теста он пройдет, несмотря ни на что, и запишет файл с именем snapshots.js
, который вы можете зафиксировать в своем репозитории. Все последующие тестовые прогоны завершатся неудачей, если вывод HTML не соответствует предыдущему содержимому в точности.
Это грубый подход, но он быстрый и эффективный.