Автоматизированное тестирование кода Javascript позволяет нам вносить изменения в проекты, не опасаясь непреднамеренного нарушения других функций. Без него добавление любой новой функции может оказаться утомительным занятием.

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

Cypress — превосходная среда автоматизированного тестирования для Javascript, а последняя версия 10.0 предоставляет новые функции и по-прежнему бесплатна для использования.

Но в версии 10 удалена очевидная функция, на которую привык полагаться я и многие другие: «Выполнить все спецификации».

Реакция пользователей

Редко бывает такой негативный отклик на обновление в Cypress. https://github.com/cypress-io/cypress/discussions/21628

Почему вы реализовали эту ужасную идею удалить отфильтрованные спецификации и запустить все спецификации?
logan5259

Я думаю, что удаление этой функции - огромная потеря. миробо

Эта функциональность была простой и отличной, и ее удаление заставляет меня сожалеть об обновлении, хотя мне нравятся многие изменения в 10.0.0. Цвимбер

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

Причина, указанная авторами Cypress

Cypress позволяет запускать тесты двумя способами:

  • кипарисовый бег npx

Это запускает тесты в командной строке в текстовом режиме. Браузер закрывается и снова открывается между каждым тестовым файлом, что концептуально чище и предотвращает «утечку» данных из одного теста в другой, что сводит к минимуму вероятность «ненадежных» тестов, поведение которых непредсказуемо.

  • npx кипарис открыт

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

Из-за непредсказуемости последствий утечки данных между тестовыми файлами пуристам следует предпочесть версию для командной строки. Это заявленная причина удаления функции «Запустить все спецификации».

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

Решение

Усердный поклонник Cypress и фанатик открытого исходного кода Глеб Бахмутов предоставил метод запуска нескольких тестов. Ключевым моментом является создание нового теста, который просто импортирует все остальные тесты.

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

Шаг 1. Обновите cypress.config.js

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

В верхней части файла мы импортируем пакет «fs» и указываем имена файлов, которые мы будем использовать для управления нашим процессом. Затем внутри setupNodeEvents мы создаем задачу, которая считывает все имена ваших тестовых файлов и создает новый отдельный файл, который просто импортирует все отдельные тестовые файлы. Ваш cypress.config.js должен выглядеть примерно так:

Шаг 2. Создайте псевдотестовый файл, который вызывает эту задачу

Внутри папки e2e создайте тестовый файл с именем «000 update tests list.cy.js». Внутри него напишите следующее. Хоть это и не совсем тест, нам нужны блоки «describe» и «it», потому что только внутри них мы можем вызывать cy.task.

describe("Update list of tests in 001", () => {
  it("", () => {
    cy.task("updateListOfTests");
  });
});

Как использовать его для запуска всех тестов

Нажмите «Список тестов обновления 000» на панели «Спецификации» окна браузера Cypress. Cypress создаст или обновит файл «001 run alltests.cy.js», выдав следующее сообщение:

Когда вы нажмете на вкладку «Спецификации», список спецификаций теперь будет выглядеть так:

Щелкните файл «001…», и все ваши тесты будут запущены!

В дальнейшем, если вы уверены, что не добавляли, не удаляли и не переименовывали тестовый файл, вы можете перейти сразу к нажатию «001…». Вам нужно только нажать «000…», когда вам нужно обновить список тестовых файлов.

Проблемы?

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

  • Тестовые файлы находятся в cypress/e2e
  • Имена тестовых файлов имеют вид *.cy.js

Если у вас есть другие соглашения, обновите код соответствующим образом.

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

Я также предположил, что вы используете имена файлов «000…» и «001…», описанные в этом посте, выбранные потому, что они будут сортировать тесты, начинающиеся со слов. Если вы решите назвать эти файлы как-то иначе, обновите значения RUN_ALL_TESTS_CY_JS и UPDATE_TESTS_LIST_CY_JS в cypress.config.js.

Дайте мне знать, если это работает для вас!

Благодарности

Большое спасибо Cypress.io за бесплатное предоставление Cypress сообществу! А также @ghiscoding и сопровождающему Cypress @lmiller1990 за то, что подняли и исправили проблему двойного запуска.