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

Что такое цепочка методов?

Цепочка методов, также известная как «беглые интерфейсы», — это метод программирования, при котором результат вызова метода возвращает объект, что позволяет вызывать для него дополнительные методы в непрерывной последовательности. Идея состоит в том, чтобы упростить сложные операции и последовательности путем «объединения» методов вместе.

Простой пример цепочки методов TypeScript:

class Calculator {
  private value: number = 0;

  add(num: number): this {
    this.value += num;
    return this;
  }

  subtract(num: number): this {
    this.value -= num;
    return this;
  }

  multiply(num: number): this {
    this value *= num;
    return this;
  }

  getResult(): number {
    return this.value;
  }
}

const calculator = new Calculator();
const result = calculator.add(5).subtract(3).multiply(2).getResult();

console.log(result);  // Outputs: 4 (Because (5 - 3) * 2 = 4)

В приведенном выше примере все методы add, subtract и multiply возвращают this, который является текущим экземпляром класса Calculator. Это позволяет нам объединять вызовы, что приводит к плавному и легко читаемому синтаксису.

Cypress и цепочка методов

Cypress использует цепочку методов в своем API, чтобы обеспечить плавный и интуитивно понятный интерфейс для написания сквозных тестов. Цепочка в Cypress предназначена не только для стиля; это важно для порядка операций из-за асинхронной природы Cypress.

Простой пример кипариса:

Представьте, что вы хотите посетить страницу, найти кнопку и нажать на нее. Вот как вы можете использовать цепочку методов в Cypress:

cy.visit('https://example.com')    // Visit a page
   .get('.my-button')              // Find an element with the class "my-button"
   .click();                       // Click the button

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

Почему цепочка методов в Cypress особенная?

  1. Встроенные обещания. Команды в Cypress заключены в структуры, подобные обещаниям, что гарантирует их выполнение в правильном порядке. Это означает, что вам не нужно беспокоиться об обработке асинхронных операций с .then() или async/await.
  2. Повторная попытка. Cypress автоматически повторяет команды до тех пор, пока они не пройдут или не истечет время ожидания. Если вы найдете элемент, который, возможно, еще не существует, Cypress будет повторять действие до тех пор, пока не найдет элемент или не истечет время ожидания.
  3. Описательные ошибки. Cypress выдает подробные сообщения об ошибках, когда что-то идет не так, что помогает быстро выявить проблемы в тестах.
  4. Расширяемость. Вы можете расширить цепочки методов Cypress с помощью пользовательских команд. Если вы часто выполняете сложную операцию, вы можете создать собственный цепной метод для оптимизации ваших тестов.

Пользовательская цепная команда в Cypress:

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

Cypress.Commands.add('login', (username, password) => {
  cy.visit('/login')
   .get('#username').type(username)
   .get('#password').type(password)
   .get('button[type="submit"]').click();
});

// Using the custom command in a test:
cy.login('alice', 'wonderland123').visit('/dashboard');

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

На простом английском языке

Спасибо, что вы являетесь частью нашего сообщества! Прежде чем уйти: