Автор оригинала: Patryk Szalanski.
Eversince Я начал работать над кодом пользователя интерфейса, автоматические тесты пользовательских интерфейсов были основной болью. Был Selenium для веб-интерфейсов и приседает для Qt GUI. Он был по своей природе нестабильно, имел много проблем с синхронизацией и произвел более ложные позитивы, чем на самом деле обнаружил какие-либо реальные проблемы.
Все это изменилось в первый раз, когда я начал использовать кипарис для углового интерфейса. Первые функции, которые немедленно схватили мое внимание, были удивительным тестовым интерфейсом пользовательским интерфейсом, и его способность правильно ждать, пока проверяемый пользователь должен быть готов, после того, как она обрабатывает все запланированные события и анимации. Это было дополнено красиво читаемым тестовым кодом и командной API, которая написала те, которые тестируют ветер.
Монтаж
Я хотел бы сосредоточиться на простоте написания фактических испытаний, поэтому я пропущу установку и начальную настройку. Он хорошо документирован на их домашней странице: Установка кипариса
Первый тестовый скрипт
Основная структура тестового файла основана на API Mocha, используя Опишите ()
и Это ()
Отказ Представьте себе, что у вас есть простое встречное веб-приложение с этикеткой #counterLabel
Отображение номера и кнопки #countupputton
Что предполагается увеличить количество на этикетке на один на каждый клик. Вы можете увидеть пример простого теста в этом фрагменте:
describe('The counter', () => { beforeEach(() => { cy.visit('/counter'); }); it('should count up by one if the button is pressed', () => { cy.get('#counterLabel').should('contain', '0'); cy.get('#countUpButton').click(); cy.get('#counterLabel').should('contain', '1'); }); });
Во-первых, он устанавливает описательные метки для тестовых шагов и инициализирует каждый тест в контексте, сначала посещая /счетчик
перед каждым случаем. Кроме того, он содержит один тест для проверки, если счетчик отображает 0
первоначально. После этого он щелкает кнопкой и проверяет, изменяется ли метка соответственно.
На этом этапе не имеет значения, есть ли анимация или переходы, потому что пробег кипариса ждет событий и обещает финишировать асинхронно. Для каждого взаимодействия, будь то в текстовом поле или нажимает на некотором элементе, он проверяет, если элемент виден и включен в первую очередь, чтобы предотвратить тест невозможным действия. Довольно удобно, не так ли?
Издевающие HTTP CONSES.
Иногда вы можете захотеть издеваться на фактическую Backend Call of Web Frestend, чтобы предотвратить потребление высева правильных данных или убирать после теста. Кроме того, вы можете сосредоточиться на тестировании поведения самого пользовательского интерфейса вместо смешивания сервера или проблем соединения в пул возможных причин для неудач. Независимо от того, что может быть причиной, с помощью Cypress вы можете легко издеваться на вызовах на фактическом сервере и подготовить приспособления для того, что подготовленная бэкэнда должна вернуться для определенного запроса HTTP.
Во-первых, вы должны инициализировать издеванную Backend, позвонив Cy.server ()
Отказ После этого вы можете определить маршруты, используя свой URL-адрес и установите ответ, включая код состояния, если это необходимо.
beforeEach(() => { cy.server(); cy.route('GET', 'https://example.org/api/v1/counter', 55); });
Эта настройка в Rebedeach ()
всегда возвращает номер 55
Если счетчик запрашивается на бэкэнда, используя HTTP-запрос. «Получить»
Параметр описывает метод запроса и может быть опущен в этом случае, как «Получить»
это метод по умолчанию.
Если мы вернемся к приведению счетчика раньше, и представьте, что он синхронизирует счетчик с помощью BeaCKend, мы могли бы отделить звонки и тестировать счетчик, как это:
describe('The counter', () => { beforeEach(() => { cy.server(); cy.route('GET', 'https://example.org/api/v1/counter', 55).as('getCounter'); cy.route('POST', 'https://example.org/api/v1/counter', '').as('counterUpdate'); cy.visit('/counter'); }); it('should count up by one if the button is pressed', () => { cy.wait('@getCounter'); cy.get('#counterLabel').should('contain', '55'); cy.get('#countUpButton').click(); cy.route('GET', 'https://example.org/api/v1/counter', 56).as('getCounter'); cy.wait('@counterUpdate'); cy.wait('@getCounter'); cy.get('#counterLabel').should('contain', '56'); }); });
На данный момент мы видим, как работает издевательства, включая псевдонимы запроса. Этот тест должен быть устойчивым сейчас, так как он ждет сетевых запросов для завершения, и только затем выполняет утверждения на счетчике в доме.
Основные понятия
Раздел документации поэтал меня от принятия плохих решений во время записи кипариса-тестов и организации моего тестового кода. Если этот пост заставил вас взволнован кипарисами и заставил вас захотеть пробовать себя, прочитайте вводный раздел о Cypress в Основные понятия
Он должен заставить вас в курсе того, как Cypress на самом деле анализирует и оценивает тестовый код и как вы можете организовать свой тестовый код, например, написание пользовательских команд.
Спасибо за прочтение!
Теперь это должно быть хорошей отправной точкой для вас, чтобы написать свои собственные удивительные тесты кипариса. Проверьте их обширную документацию и попробуйте!