elide test запускает файлы node:test на JavaScript и TypeScript и тесты JUnit.
elide testУпавший тест делает код выхода ненулевым.
JavaScript и TypeScript
Тесты используют API node:test и не требуют манифеста. Файл считается тестом, если он соответствует *.test.*,
*.spec.*, *_test.* или *_spec.* либо лежит в test, tests или __tests__. Расширения: .js, .mjs, .cjs,
.ts, .mts, .cts.
Обнаружение пропускает скрытые каталоги, каталоги зависимостей и результатов сборки. Оно останавливается на любом
вложенном проекте (каталоге с elide.pkl, package.json, pom.xml или requirements.txt), поэтому из корня
рабочего пространства тесты участников не находятся. Чтобы запустить их, укажите путь.
import test from "node:test";
import assert from "node:assert";
test("adds two values", () => {
assert.equal(1 + 1, 2);
});Тесты JVM
Тесты JVM выполняются на JUnit Platform и требуют elide.pkl. src/test — набор исходников для тестов по умолчанию;
объявленный набор исходников типа test заменяет его (Наборы исходников).
- Тестовые наборы получают
testPackagesи зависимости основного набора. - Встроенные библиотеки JUnit добавляются по умолчанию.
jvm.features.testing = falseубирает и API JUnit для компиляции, и встроенную среду выполнения; тогда для запуска тестов JVM нужен консольный лаунчер JUnit (junit-platform-console) вtestPackages, иначе запуск завершается ошибкой. На запуски без тестов JVM это не влияет. processorsприменяются к тестовым исходникам.- Тестовая JVM получает
jvm.flagsиjvm.defs(как-D). - Зависимости
modulesтестового и основного наборов попадают в--module-pathс--add-modules=ALL-MODULE-PATH. - Настройки параллелизма в
junit-platform.propertiesна тестовом classpath переопределяют--concurrency.
Выбор тестов
Пути, каталоги или glob-шаблоны сужают набор тестов JavaScript и TypeScript:
elide test src/api
elide test src/api/client.test.tsС аргументами-путями тесты JVM пропускаются, и выводится Path filtering unsupported for JVM tests: <paths>. -t
отбирает тесты по имени в обоих средствах запуска тестов:
elide test -t 'parses .+ headers'Тесты JVM принимают селекторы JUnit и выражения тегов:
elide test --select=class:com.example.ParserTest
elide test --select=method:com.example.ParserTest#parsesHeaders
elide test --select=package:com.example.parser # the package and its subpackages
elide test com.example.parser # a dotted bare token is a package selector
elide test --include-tag=fast --include-tag=unit # fast OR unit
elide test --exclude-tag=slow --exclude-tag=flaky # neither slow nor flaky
elide build test --select=class:com.example.ParserTest--include-tag='slow & !flaky' — одно выражение. Фильтры тегов применяются после селекторов.
Вывод и отчёты
Ход выполнения выводится в stderr, итоговая сводка — в stdout:
elide test > summary.txt
elide test 2> progress.txtОтчёты записываются в .dev/reports/tests/<language>/<source-set>/. testing.reports в elide.pkl включает их без
флага:
import "elide:Testing.pkl" as Testing
testing {
reports { Testing.xmlReport() }
}Вывод TAP
--reporter=tap превращает stdout в чистый поток TAP 13:
TAP version 13
# start 1: suite A > t1
# out 1: printed from inside a test
ok 1 - suite A > t1
# start 2: broken
not ok 2 - broken
---
message: "expected 1 to equal 2"
severity: "ERR_ASSERTION"
...
1..2# start <id>открывает тест; строки его вывода имеют вид# out <id>: <text>.# out: <text>не относится ни к одному тесту.- Тестовые точки нумеруются
1..Nв порядке завершения. Сопоставляйте точки с тестами по строке# start, а не по номеру. - Блок YAML появляется только у падений с подробностями;
severity— код ошибки средства запуска тестов, если он есть. - Stderr не оборачивается:
elide test --reporter=tap 2>&1не является корректным TAP. - JVM: вывод привязывается к своему тесту, только пока выполняется ровно один тест. С
--concurrencyбольше 1 или сjunit-platform.propertiesв проекте он остаётся непривязанным. - JavaScript:
console.logвнутри теста или на верхнем уровне после импортаnode:testоборачивается. Вывод до этого импорта выводится как есть. Вывод хука относится к тесту, который хук оборачивает;t.diagnosticоборачивается как# out.
Покрытие
elide test --coverage
elide run --coverageПокрытие JVM записывается в .dev/reports/coverage/jvm/<task>/ в формате HTML, XML или CSV; покрытие JavaScript и
TypeScript — в формате LCOV, в .dev/reports/coverage/js/lcov.info для тестов и
.dev/reports/coverage/js/run/lcov.info для запусков. В консоль выводится одна общая сводка. Блок coverage верхнего
уровня собирает покрытие без флага:
import "elide:Coverage.pkl" as Coverage
coverage {
enabled = true
scope = "tests"
jvm {
excludes { "org.example.generated.*" }
reports {
Coverage.xmlReport()
Coverage.htmlReport()
}
}
js {
paths { "src" }
}
}| Свойство | Значение | По умолчанию |
|---|---|---|
enabled | Собирать без --coverage. | false |
scope | "tests", "runs" или "all"; --coverage всегда покрывает свою задачу. | "tests" |
jvm.reports | Coverage.htmlReport(), xmlReport(), csvReport(). | нет |
jvm.excludes | Шаблоны классов (*, ?), которые не инструментируются, например сгенерированный код. | нет |
js.paths | Корни исходников для отчёта; пустой список означает весь проект. | нет |
С покрытием elide run запускает отдельный процесс JVM.
Параметры
| Параметр | Действие |
|---|---|
-t REGEX | Отбирать по имени теста или объемлющего набора тестов. |
--where CEL | JavaScript: запускать тесты, для которых истинно выражение CEL над name, parents и file. |
--select=SELECTOR | JVM: селектор class:, method: или package:; можно повторять. |
--include-tag=EXPR | JVM: запускать тесты с подходящими тегами; повторы объединяются через ИЛИ. |
--exclude-tag=EXPR | JVM: пропускать тесты с подходящими тегами; повторы объединяются через И. |
--bail[=N] | Остановиться после N падений (по умолчанию 1). |
--test-timeout=MS | Тайм-аут одного теста по умолчанию. |
--timeout DURATION | Ограничение времени на весь вызов (глобальный параметр). |
--only | Запускать только тесты, помеченные .only. |
--concurrency=N | Запускать файлы или классы JVM параллельно. По умолчанию 1; 0 недопустимо. |
--coverage | Собирать покрытие; см. Покрытие. |
--reporter=junit | Писать отчёты JUnit XML. |
--reporter=tap | Писать TAP 13 в stdout (и в --reporter-outfile). |
--reporter-outfile=DIR | Каталог отчётов. |
--debugger[= | Подключить отладчик; см. ниже. |
--debugger-host=HOST, --debugger-port=PORT | Адрес отладчика JavaScript (DAP: 4711; CDP: 1337). |
Форма --debugger | Что отлаживает |
|---|---|
| без значения | Тесты JVM через JDWP на 127.0.0.1:5005 и тесты JavaScript. |
=5005, =host:5005 | Только тесты JVM (JDWP). |
=dap, =cdp | Только тесты JavaScript. |
Синтаксис: Отладка. Неизвестный параметр или пропущенное значение приводит к ошибке до начала запуска (Задачи сборки).
Ограничения
- Обнаружения тестов Python нет; запускайте unittest или pytest (Тесты Python).
- Тестам JVM нужен манифест.
- Не реализовано: снапшоты
node:test,mock.module, режим наблюдения, программныйrun(),node:test/reporters.
Поддерживаемый API: API тестов Node.
Примеры
Начните с шаблона:
elide init --template java # Java app with a JUnit test
elide init --template ktjvm # Kotlin app with a test