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

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

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

Обзор

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

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

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

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

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

npm run test:e2e

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

Чтобы запустить подмножество тестовых файлов, используйте npm run <integration test command> <file_name1> ..., где <integration test command> — это test:e2e или test:integration*, а <file_name> — имя любого файла .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 "reads a file"

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

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

npm run test:integration:all

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

Команда all запустит тесты для режимов no sandboxing, 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 вывод будет передаваться в консоль в реальном времени, а также сохраняться в лог-файл во временной директории теста.

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

--- TEST: <log dir>:<test-name> --- ... output from the qwen command ... --- END TEST: <log dir>:<test-name> ---

Линтинг и форматирование

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

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

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

npm run lint

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

npm run lint:fix

Структура директорий

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

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

.integration-tests/ └── <run-id>/ └── <test-file-name>.test.js/ └── <test-case-name>/ ├── output.log └── ...other test artifacts...

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

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

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

  • sandbox:none: запуск тестов без песочницы.
  • sandbox:docker: запуск тестов в Docker-контейнере.
  • sandbox:podman: запуск тестов в Podman-контейнере.
Last updated on