Skip to Content
Интеграционные Тесты

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

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

Обзор

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

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

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

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

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

npm run test:e2e

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

Чтобы запустить подмножество тестовых файлов, можно использовать команду npm run <integration test command> <file_name1> ...., где — это либо 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

Диагностика

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

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

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

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

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

Если вывод сохраняется, test runner выведет путь к уникальному каталогу для этого запуска тестов.

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

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

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

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

Формат подробного вывода позволяет легко определить источник логов:

--- TEST: <log dir>:<test-name> --- ... вывод от команды qwen ... --- 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