Автоматизированное тестирование кода 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 за то, что подняли и исправили проблему двойного запуска.