Ускорьте тестирование с помощью Cypress

На прошлой неделе мы уже создали компонент, в основном компонент пользовательской формы ввода.

Мы хотим, чтобы в нашем новом проекте все было проверено, и процессы обеспечения качества заставляют нас покрывать % нашего кода тестированием, поэтому мы должны быть готовы к тестированию.

Нам наскучили скучные тесты для тестирования функций или модульные тесты, которые имитируют все в ядре нигде больше, поэтому мы решили использовать Cypress, чтобы убедиться, что все работает так, как мы ожидали.

Никаких сравнений и комментариев с его предшественниками, такими как Selenium, Protactor… Он просто быстрее, его очень приятно кодировать, и он выполняет свою работу.

Введение

Подводя итог, мы должны протестировать этот компонент и его другую часть кода.

Если вы хотите увидеть, как мы создали этот пользовательский компонент, нажмите на ссылку ниже 👇



1. Интеграция Cypress

ng add @cypress/schematic

2. Подумайте, прежде чем сделать

Мы собираемся протестировать три состояния компонента: Default, Filled и Active.

В целом, мы уделяем особое внимание структуре данных. Затем, с точки зрения изменений, которые мы видим в стилях, мы углубляемся в то, что изменилось в нашем состоянии Css.

По умолчанию

Создаем компонент, проблем нет и компонент существует сам по себе с правильным полем

Заполнено

Записываем во ввод и заполненный текст должен появиться во вводе

Активный

Изменения отражаются в пользовательском интерфейсе.

3. Теперь тестируем код

Мы строим наши первые тесты здесь

cypress/integration/spec.ts

describe('Custom Input Form Component', () => {
const typeComponent = 'app-text-field-form'
beforeEach(() => {
  cy.visit('/')
})

Просто зайдя на веб-страницу…

По умолчанию

Создаем компонент, проблем нет и компонент существует сам по себе с правильным полем

it(‘Default’, () => {
  cy.get(typeComponent).contains(‘Another name’)
})

Заполнено

Записываем во ввод и заполненный текст должен появиться во вводе

it('Filled', () => {
   const foo = 'Hello, World';
   
   cy.get(typeComponent).type(foo)
   cy.get(`${typeComponent} > input`).should('have.value', foo)
})

Активный

Изменения отражаются в пользовательском интерфейсе.

it('Active', () => {
  const foo = 'Hello, World';
  
  cy.get(`${typeComponent} > input`).first().focus()
  cy.get(`${typeComponent} > input`).should('have.css', 'border', '1px solid rgb(146, 119, 255)')
})

В моем случае я просто сравнил с рамкой, потому что это единственное, что нужно добавить, когда она активна. Тем не менее, я признаю, что вы можете сделать это более элегантным способом, добавляя классы и сравнивая их в Cypress, если классы были добавлены успешно.

Вот API Cypress для взаимодействия с DOM



Откройте наши тесты

ng e2e

Код

Я не делюсь Stackblitz, потому что его сложно интегрировать с Cypress, и вы не сможете запускать команды, однако я создал репозиторий на github со всем кодом 👨‍💻 Я объяснял ранее.



Заключение

Если вы новичок в Cypress и тестировании или даже если вы этого не знали, я надеюсь, что эта статья может дать представление о возможностях Cypress и о том, как он помогает нам автоматизировать задачи (он поставляется с множеством функций, таких как запись видео , скриншоты и т.д.).

На сегодняшний день это лучший фреймворк для тестирования Front, такие тесты придают нам уверенности и позволяют автоматизировать взаимодействие.

Есть больше возможностей, которые мы можем увидеть в других сообщениях, поэтому подписывайтесь на меня, если хотите увидеть, как я решаю обычные проблемы, которые вы можете встретить в своей повседневной жизни. Оставайтесь с нами и до скорой встречи!!!