Окончательное руководство по тестированию вашего интерфейса с помощью современных инструментов

Руководство по автоматическому тестированию React с библиотекой React Testing Library, Cypress & Cucumber

Мотивация

Фронтенд — это клиентская часть вашего приложения.
Все, что видно вашим пользователям, является частью внешнего интерфейса.
Другими словами, тестирование внешнего интерфейса связано с тестированием графического пользовательского интерфейса (GUI).
Так вы получите более полную картину. , если вы разрабатываете платформу для онлайн-покупок, тестировщики внешнего интерфейса проверяют, соответствует ли внешний вид веб-сайта требованиям. Кроме того, они следят за тем, чтобы все работало правильно и чувствовалось так, как задумал дизайнер пользовательского опыта.
Так почему же это так важно?
Ну… поскольку наши конечные пользователи судят о книге по обложке и не имеют ни малейшего представления о внутренней стороне вещей, они замечают только те проблемы, которые видят. Следовательно, проблемы в пользовательском интерфейсе сразу бросаются в глаза. Таким образом, компания, которая хочет добиться успеха, должна обеспечить отличный и последовательный пользовательский опыт. Это означает, что приложение должно работать быстро и без ошибок, независимо от того, какое устройство или браузер используется.

Добро пожаловать в интерфейс тестирования!
Внешнее тестирование заключается в выполнении тестов на нескольких устройствах и в разных браузерах, чтобы убедиться, что приложение не содержит ошибок и обеспечивает удобство работы пользователей.

Автоматизация

Возможно, вы уже знакомы с тестированием вручную. Например, вы внедрили поле ввода в форму. После этого вы открываете веб-страницу, щелкаете в поле ввода, чтобы проверить, работает ли она, и отправляете форму. Это был ручной тест. Выполнение этого теста для всего, что вы реализуете снова и снова, утомительно и не масштабируется. В какой-то момент у вас уже не будет времени что-либо реализовывать, и вы потратите целый день на тестирование. Здесь на помощь приходит автоматизация. Используя автоматизированные концепции, мы можем быть уверены, что функции будут продолжать работать должным образом.
Автоматические тесты также помогают, особенно в так называемых пограничных случаях. Случаи использования, о которых мы склонны забывать, например, поставить галочку в каком-то процессе регистрации.

Веские причины автоматизировать тестирование

  1. Обновляйте свой код с уверенностью!
    Хорошие тесты позволяют вам проводить рефакторинг кода с уверенностью, что вы не нарушаете какие-либо функции и не меняете тесты.
  2. Документация включена БЕСПЛАТНО!
    Тесты пригодятся, потому что они объясняют, как ваш код работает с ожидаемым поведением. Тесты, в отличие от письменной документации, должны всегда обновляться.
  3. Ошибки исчезли навсегда — почти!
    Написав тестовые примеры для каждой ошибки, вы можете быть уверены, что они никогда не вернутся. Дальнейшее написание тестов улучшит ваше понимание кода и требований. Используя тестирование, вы можете найти проблемы, которые иначе могли бы пропустить.

Что мы тестируем?

ЮНИТ-ТЕСТЫ
Они ориентированы на наименьшую сущность ваших внешних приложений.
Обычно это компоненты в контексте React, но охватывающие интерфейсы, классы и методы. Эти простые и небольшие тесты проверяют, соответствует ли результат небольшой детали ожидаемому. Проверки предопределены и полностью изолированы.

ИНТЕГРАЦИОННЫЕ ТЕСТЫ
Как следует из названия, в тестах такого типа объединяются несколько компонентов кода и проверяется их взаимодействие. В React они обычно состоят из представлений, объединяющих несколько компонентов.

UI / КОНЕЧНЫЕ ИСПЫТАНИЯ
Эти тесты — святой Грааль, поскольку они тестируют приложение так же, как это сделал бы реальный пользователь. Они проверяют всю систему в целом.

Модульные и интеграционные тесты

Прежде чем мы начнем: «Хорошие тесты детерминированы, они никогда не зависят от среды».

Это означает, что тест не должен быть ненадежным — иногда он проходит, а иногда нет. Вот некоторые возможные причины:
другой часовой пояс, другая файловая система, состояние (которое не очищается перед каждым тестом), зависимость от порядка тестов, тайм-ауты для тестирования асинхронного поведения.

Технологии, которые мы используем:

  1. библиотека тестирования реакции
  2. Реагировать
  3. Шутка
//error-boundary.spec.ts
import "@testing-library/jest-dom";
import ErrorBoundary from "./error-boundary";
import React from "react";
import { render } from "app/test/test-utils";
beforeEach(() => {
  console.error = jest.fn();
});
describe("Error boundary", () => {
  it("listens to and handles errors", () => {
    const Child = () => {
      throw new Error();
    };
    const { getByText, unmount } = render(
      <ErrorBoundary>
        <Child />
      </ErrorBoundary>
    );
    const errorMessage = getByText("Error");
    expect(errorMessage).toBeDefined();
    unmount();
  });
});

Затем мы можем запустить наши модульные или интеграционные тесты с помощью jest runner:

npm run jest --config jest.config.js

Интеграция и пользовательский интерфейс / Сквозные тесты

Ядром нашего набора тестов являются интеграционные тесты и тесты пользовательского интерфейса. Эти тестовые компоненты друг с другом и в качестве конечного пользователя. Таким образом, они обеспечивают бесперебойную работу с точки зрения конечного пользователя.
Чтобы получить максимальную отдачу от этого, мы можем использовать Кипарис и Огурец.

Cypress – это бесплатный инструмент для автоматизированного тестирования с открытым исходным кодом, разработанный для современных веб-приложений на основе современных платформ, таких как React. Он предоставляет пользовательский интерфейс, чтобы указать, какие тесты и команды выполняются, пройдены и не пройдены.

Но почему огурец? Я не голоден!

Существует несколько инструментов для Behavior Driven Development Framework, но наиболее часто используемым инструментом BDD является Cucumber. BDD — это вариант разработки через тестирование (TDD). В качестве основы для тестов используются удобочитаемые описания требований к программному обеспечению.
Такой подход помогает нам писать тесты в понятной лексике для всех участников проекта. По этой причине даже человек без опыта разработки может получить представление о проведенных тестах.

Для Cypress мы можем писать наши тесты только на Javascript/TypeScript. Однако, если мы хотим использовать огурец, мы конвертируем тест Java Script в огурец (язык для огурца).
Огурец состоит в основном из четыре основных ключевых слова: Дано, Когда, И и «Затем. . Используя ключевые слова, мы можем использовать код JavaScript, который уже использовался.

Пример кипариса

describe("Form Test", () => {
  it("Can fill out a form", () => {
    cy.visit("/");
    cy.get("form");
cy.get('input[name="name"]').type("David").should("have.value", "David");
cy.get('input[name="email"]')
      .type("[email protected]")
      .should("have.value", "[email protected]");
cy.get("textarea")
      .type("This is a test")
      .should("have.value", "This is a test");
cy.get("form").submit();
  });
});

Учитывая, что когда вы используете кипарис и огурец, тогда вы качаетесь!

//integration/formular/formular.ts
import {
  Before,
  Given,
  Then,
  When,
  And,
} from "cypress-cucumber-preprocessor/steps";
Given("we are on the form page", () => {
  cy.visit("/");
  cy.get("form");
});
When("we have entered the name {String}", (name) => {
  cy.get('input[name="name"]').type(name).should("have.value", name);
});
And("we have entered the email {String}", (email) => {
  cy.get('input[name="email"]').type(email).should("have.value", email);
});
And("we left the comment{String}", (comment) => {
  cy.get("textarea").type(comment).should("have.value", comment);
});
And("we have submit the form", () => {
  cy.get("form").submit();
});
Then("we are on the start page", () => {
  cy.url().should("include", "start");
});

Feature Test File — Да, просто и красиво, не так ли?

//integration/form.feature
Functionality: Testing the form input
Scenario: F-01 Fill out the form and submit it
 Given we are on the form page
 When we have entered the name "David"
 And we have entered the email "[email protected]"
 And we left the comment "This is a test"
 And we have submit the form
 Then we are on the start page

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

Краткое содержание

В этой статье я попытался подчеркнуть важность тестирования вашего внешнего интерфейса (GUI). Нам нужны инструменты, которые помогут нам убедиться, что наши продукты обеспечивают отличный и последовательный пользовательский интерфейс.
Такие инструменты гарантируют, что приложение не содержит ошибок и будет удобным для пользователей. Познакомив вас с библиотекой тестирования React и Cypress с Cucumber, я попытался показать вам эти потрясающие тестовые фреймворки и их преимущества:

  • Простота установки и настройки
  • Быстро, запуская тесты во время разработки и прямо в вашем приложении
  • Иметь мощный отладчик реального времени
  • Легко писать, потому что TypeScript - YAY!
  • Полезный и простой API
  • Супер подробная документация
  • Очень активное сообщество и регулярные обновления

Я надеюсь, что эта статья смогла дать вам небольшое представление о теме UI/UX-тестов и пробудить любопытство к этим инструментам.