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