Тесты играют решающую роль в каждом проекте. Кто-то может возразить, что тесты тормозят проект, и это действительно так. Однако истинная важность заключается в том, сколько времени требуется для поддержки проекта и добавления новых функций.
Хотя начальная фаза разработки может протекать быстро, она часто приводит к тому, что значительное количество времени уходит на исправление ошибок. Иногда весь спринт может быть посвящен исправлению ошибок, а не разработке новых функций.
Чтобы избежать таких сценариев, важно расставить приоритеты в подготовке к тестированию и включить тестирование в рабочий процесс нашего проекта.
На изображении ниже видно, что тесты изначально замедляют процесс разработки. Тем не менее, он обеспечивает последовательный прогресс в разработке с течением времени.
С другой стороны, без тестов разработка может быть быстрее в начале, но позже это может привести к потенциальной катастрофе.
Бывает и хуже: проект с плохими тестами.
Пища для размышлений
Люди часто думают, что производственный код и тестовый код — это разные вещи. Предполагается, что тесты являются дополнением к производственному коду и не требуют затрат на владение. Более того, люди часто считают, что чем больше тестов, тем лучше. Это не так. Код — это обязательство, а не актив. Чем больше кода вы введете, тем больше вы расширите площадь поверхности для потенциальных ошибок в вашем программном обеспечении и тем выше стоимость поддержки проекта. Всегда лучше решать проблемы с помощью как можно меньшего количества кода.
Тесты — это тоже код. Вы должны рассматривать их как часть вашей кодовой базы, направленную на решение конкретной проблемы: обеспечение корректности приложения. Модульные тесты, как и любой другой код, также уязвимы для ошибок и требуют обслуживания.
Создать проект
Запустите эту команду в папке ваших проектов:
npm create svelte@latest
Мы будем использовать javascript для этих серий, вы можете использовать Typescript, если хотите.
Выберите варианты:
1. Скелетный проект
2. Эслинт, хорошенькая, драматург и витест
Теперь, когда проект готов, остался последний шаг. Вам необходимо установить зависимости проекта. Выполните следующую команду:
npm i
Беги, драматург
npm run test:integration
Упс, не получится…
У Playwright есть собственная настройка среды, например, установка Chromium на ваш компьютер. Вы можете установить его с помощью следующей команды:
npx playwright install
Теперь, если вы запустите npm run test:integration, он должен работать правильно.
Запустить Vitest
npm run test:unit
Это автоматически переводит вас в режим наблюдения, что означает, что любые изменения в файловой системе вызовут повторный запуск тестов. Нажмите q, чтобы выйти из этого режима.
Текущий подход в SvelteKit заключается в хранении тестовых файлов Vitest в каталоге «src». Чтобы избежать путаницы с тестами Playwright, тесты Playwright хранятся в отдельном каталоге под названием «тесты».
Установить пакеты дом
Нам нужен доступ к объектной модели документа (DOM), которая не включена в стандартную среду Node.js. Кроме того, нам нужно будет установить дополнительные пакеты для написания ожиданий модульного теста относительно DOM.
npm install --save-dev \ jsdom \ @testing-library/svelte \ @testing-library/jest-dom \ @testing-library/user-event
Затем создайте новый файл с именем src/vitest/registerMatchers.js
и добавьте следующее содержимое. Этот файл гарантирует, что сопоставители, которые мы будем использовать, доступны для использования через функцию expect
.
import matchers from '@testing-library/jest-dom/matchers'; import { expect } from 'vitest'; expect.extend(matchers);
Затем обновите vite.config.js
, чтобы включить новое свойство среды, которое правильно устанавливает jsdom
. Кроме того, добавьте свойство setupFiles
, чтобы обеспечить загрузку ранее определенного файла непосредственно перед загрузкой наборов тестов.
const config = { plugins: [sveltekit()], test: { ..., environment: 'jsdom', setupFiles: ['./src/vitest/registerMatchers.js'] } };
Очищать DOM после каждого запуска теста
Чтобы убедиться, что у каждого теста есть собственная чистая версия DOM, мы будем использовать функцию очистки.
Создайте новый файл с именем src/vitest/cleanupDom.js
:
import { afterEach } from 'vitest'; import { cleanup } from '@testing-library/svelte'; afterEach(cleanup);
Затем добавьте файл src/vitest/cleanupDom.js
к свойству setupFiles
в vite.config.js
:
const config = { ..., test: { ..., setupFiles: [ './src/vitest/cleanupDom.js', './src/vitest/registerMatchers.js' ] } };
Автоматически восстанавливать макеты
Наконец, включите свойство restoreMocks
в vite.config.js
, как показано здесь:
const config = { ..., test: { ..., restoreMocks: true } };
Теперь мы готовы…
Спасибо, что нашли время, чтобы прочитать мою статью. Я ценю ваш интерес к теме и надеюсь, что она была информативной. Если у вас есть какие-либо отзывы или комментарии к статье, пожалуйста, не стесняйтесь поделиться ими со мной.