Skip to Content
Руководство для разработчиковDevelopmentИнтеграционные тесты

Интеграционные тесты

В этом документе приведена информация о фреймворке интеграционного тестирования, используемом в данном проекте.

Обзор

Интеграционные тесты предназначены для проверки сквозной функциональности Qwen Code. Они запускают собранный исполняемый файл в контролируемой среде и проверяют, соответствует ли его поведение ожидаемому при взаимодействии с файловой системой.

Эти тесты находятся в каталоге integration-tests и запускаются с помощью пользовательского тестового раннера.

Запуск тестов

Интеграционные тесты не выполняются в рамках команды по умолчанию npm run test. Их необходимо запускать явно с помощью скрипта npm run test:integration:all.

Также интеграционные тесты можно запустить с помощью следующей команды-ярлыка:

npm run test:e2e

Запуск определённого набора тестов

Чтобы запустить подмножество файлов с тестами, используйте команду npm run <команда_интеграционных_тестов> <имя_файла1> ..., где <команда_интеграционных_тестов> — это либо test:e2e, либо test:integration*, а <имя_файла> — любой из файлов .test.js в каталоге integration-tests/. Например, следующая команда запускает тесты из файлов list_directory.test.js и write_file.test.js:

npm run test:e2e list_directory write_file

Запуск одного теста по имени

Чтобы запустить один тест по его имени, используйте флаг --test-name-pattern:

npm run test:e2e -- --test-name-pattern "считывает файл"

Запуск всех тестов

Чтобы запустить весь набор интеграционных тестов, выполните следующую команду:

npm run test:integration:all

Матрица песочниц

Команда all запускает тесты для режимов «без песочницы», docker и podman.
Каждый отдельный тип можно запустить с помощью следующих команд:

npm run test:integration:sandbox:none
npm run test:integration:sandbox:docker
npm run test:integration:sandbox:podman

Диагностика

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

Сохранение вывода тестов

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

Чтобы сохранить вывод тестов, установите переменную окружения KEEP_OUTPUT в значение true.

KEEP_OUTPUT=true npm run test:integration:sandbox:none

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

Подробный вывод

Для более детальной отладки установите переменную окружения VERBOSE в значение true.

VERBOSE=true npm run test:integration:sandbox:none

Если использовать VERBOSE=true и KEEP_OUTPUT=true в одной команде, вывод будет передаваться в консоль и одновременно сохраняться в файл журнала внутри временной директории теста.

Подробный вывод форматируется так, чтобы чётко определять источник логов:

--- ТЕСТ: <директория_журнала>:<имя_теста> --- ... вывод команды qwen ... --- КОНЕЦ ТЕСТА: <директория_журнала>:<имя_теста> ---

Проверка кода и форматирование

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

Запуск линтера

Чтобы проверить наличие ошибок линтера, выполните следующую команду:

npm run lint

Вы можете добавить флаг :fix, чтобы автоматически исправить все устранимые ошибки линтера:

npm run lint:fix

Структура каталогов

Интеграционные тесты создают отдельный каталог для каждого запуска тестов внутри каталога .integration-tests. Внутри этого каталога создаётся подкаталог для каждого файла с тестами, а в нём — подкаталог для каждого отдельного тестового случая.

Такая структура упрощает поиск артефактов конкретного запуска тестов, файла или случая.

.integration-tests/ └── <run-id>/ └── <test-file-name>.test.js/ └── <test-case-name>/ ├── output.log └── ...другие артефакты теста...

Непрерывная интеграция

Чтобы гарантировать выполнение тестов на интеграцию, в файле .github/workflows/e2e.yml определён рабочий процесс GitHub Actions. Этот рабочий процесс автоматически запускает тесты на интеграцию для запросов на слияние в ветку main или при добавлении запроса на слияние в очередь слияния.

Тесты выполняются в различных средах изоляции, чтобы обеспечить проверку Qwen Code во всех поддерживаемых средах:

  • sandbox:none: тесты выполняются без изоляции;
  • sandbox:docker: тесты выполняются в контейнере Docker;
  • sandbox:podman: тесты выполняются в контейнере Podman.
Last updated on