elide test führt node:test-Dateien in JavaScript und TypeScript sowie JUnit-Tests aus.
elide testEin fehlschlagender Test führt zu einem Exit-Code ungleich null.
JavaScript und TypeScript
Tests verwenden die node:test-API und brauchen kein Manifest. Eine Datei ist ein Test, wenn sie auf *.test.*,
*.spec.*, *_test.* oder *_spec.* passt oder unter test, tests oder __tests__ liegt. Endungen: .js,
.mjs, .cjs, .ts, .mts, .cts.
Die Erkennung überspringt versteckte Verzeichnisse, Abhängigkeits- und Build-Ausgabeverzeichnisse. Sie hält bei jedem
verschachtelten Projekt an (einem Verzeichnis mit elide.pkl, package.json, pom.xml oder requirements.txt),
daher findet ein Workspace-Wurzelverzeichnis keine Tests der Mitglieder. Geben Sie einen Pfad an, um sie auszuführen.
import test from "node:test";
import assert from "node:assert";
test("adds two values", () => {
assert.equal(1 + 1, 2);
});JVM-Tests
JVM-Tests laufen auf der JUnit Platform und brauchen eine elide.pkl. src/test ist das Standard-Source-Set für
Tests; ein deklariertes Source-Set vom Typ test ersetzt es (Source-Sets).
- Test-Sets erhalten
testPackagesplus die Abhängigkeiten des Haupt-Sets. - Mitgelieferte JUnit-Bibliotheken werden standardmäßig hinzugefügt.
jvm.features.testing = falseentfernt sowohl die JUnit-APIs zum Kompilieren als auch die mitgelieferte Laufzeit; ein JVM-Testlauf braucht dann einen JUnit-Konsolen-Launcher (junit-platform-console) intestPackagesund schlägt sonst mit einem Fehler fehl. Läufe ohne JVM-Tests sind nicht betroffen. processorslaufen auf den Testquellen.- Die Test-JVM erhält
jvm.flagsundjvm.defs(als-D). modules-Abhängigkeiten des Test- und des Haupt-Sets kommen mit--add-modules=ALL-MODULE-PATHauf--module-path.- Parallelitätseinstellungen in einer
junit-platform.propertiesauf dem Test-Classpath überschreiben--concurrency.
Tests auswählen
Pfade, Verzeichnisse oder Globs grenzen JavaScript- und TypeScript-Tests ein:
elide test src/api
elide test src/api/client.test.tsPfadargumente überspringen JVM-Tests und geben Path filtering unsupported for JVM tests: <paths> aus. -t filtert in
beiden Test-Runnern nach Testnamen:
elide test -t 'parses .+ headers'JVM-Tests akzeptieren JUnit-Selektoren und Tag-Ausdrücke:
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' ist ein einziger Ausdruck. Tag-Filter greifen nach den Selektoren.
Ausgabe und Berichte
Der Fortschritt geht nach stderr, die abschließende Bilanz nach stdout:
elide test > summary.txt
elide test 2> progress.txtReporter schreiben nach .dev/reports/tests/<language>/<source-set>/. testing.reports in elide.pkl aktiviert sie
ohne Flag:
import "elide:Testing.pkl" as Testing
testing {
reports { Testing.xmlReport() }
}TAP-Ausgabe
--reporter=tap macht stdout zu einem reinen TAP-13-Stream:
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>eröffnet einen Test; seine Ausgabezeilen lauten# out <id>: <text>.# out: <text>gehört zu keinem Test.- Testpunkte sind in der Reihenfolge ihres Abschlusses von
1..Nnummeriert. Ordnen Sie Punkte über die# start-Zeile den Tests zu, nicht über die Nummer. - Ein YAML-Block erscheint nur bei Fehlschlägen mit Details;
severityist der Fehlercode des Runners, falls vorhanden. - Stderr wird nicht eingerahmt:
elide test --reporter=tap 2>&1ist kein gültiges TAP. - JVM: Ausgabe wird ihrem Test nur zugeordnet, solange genau ein Test läuft. Mit
--concurrencyüber 1 oder einerjunit-platform.propertiesim Projekt bleibt sie ohne Zuordnung. - JavaScript:
console.login einem Test oder auf oberster Ebene nach dem Import vonnode:testwird eingerahmt. Ausgabe vor diesem Import ist roh. Hook-Ausgabe gehört zu dem Test, den der Hook umschließt;t.diagnosticwird als# outeingerahmt.
Abdeckung
elide test --coverage
elide run --coverageJVM-Abdeckung landet als HTML, XML oder CSV in .dev/reports/coverage/jvm/<task>/; die Abdeckung für JavaScript und
TypeScript ist LCOV, in .dev/reports/coverage/js/lcov.info für Tests und .dev/reports/coverage/js/run/lcov.info
für Läufe. Die Konsole gibt eine gemeinsame Zusammenfassung aus. Der Block coverage auf oberster Ebene erfasst ohne
das Flag:
import "elide:Coverage.pkl" as Coverage
coverage {
enabled = true
scope = "tests"
jvm {
excludes { "org.example.generated.*" }
reports {
Coverage.xmlReport()
Coverage.htmlReport()
}
}
js {
paths { "src" }
}
}| Eigenschaft | Bedeutung | Standard |
|---|---|---|
enabled | Ohne --coverage erfassen. | false |
scope | "tests", "runs" oder "all"; --coverage deckt immer den eigenen Task ab. | "tests" |
jvm.reports | Coverage.htmlReport(), xmlReport(), csvReport(). | keine |
jvm.excludes | Klassenmuster (*, ?), die nicht instrumentiert werden, etwa generierter Code. | keine |
js.paths | Quellwurzeln für den Bericht; leer bedeutet das ganze Projekt. | keine |
Mit Abdeckung startet elide run einen separaten JVM-Prozess.
Optionen
| Option | Wirkung |
|---|---|
-t REGEX | Namen von Tests oder umgebenden Suites filtern. |
--where CEL | JavaScript: Tests ausführen, für die ein CEL-Ausdruck über name, parents und file wahr ist. |
--select=SELECTOR | JVM: Selektor class:, method: oder package:; wiederholbar. |
--include-tag=EXPR | JVM: Tests ausführen, deren Tags passen; Wiederholungen werden mit ODER verknüpft. |
--exclude-tag=EXPR | JVM: Tests überspringen, deren Tags passen; Wiederholungen werden mit UND verknüpft. |
--bail[=N] | Nach N Fehlschlägen anhalten (Standard 1). |
--test-timeout=MS | Standard-Timeout pro Test. |
--timeout DURATION | Zeitlimit für den gesamten Aufruf (global). |
--only | Nur mit .only markierte Tests ausführen. |
--concurrency=N | Dateien oder JVM-Klassen parallel ausführen. Standard 1; 0 ist ungültig. |
--coverage | Abdeckung erfassen; siehe Abdeckung. |
--reporter=junit | JUnit-XML-Berichte schreiben. |
--reporter=tap | TAP 13 nach stdout schreiben (und unter --reporter-outfile). |
--reporter-outfile=DIR | Berichtsverzeichnis. |
--debugger[= | Einen Debugger anhängen; siehe unten. |
--debugger-host=HOST, --debugger-port=PORT | Adresse des JavaScript-Debuggers (DAP: 4711; CDP: 1337). |
Form von --debugger | Debuggt |
|---|---|
| ohne Wert | JVM-Tests über JDWP auf 127.0.0.1:5005 sowie JavaScript-Tests. |
=5005, =host:5005 | Nur JVM-Tests (JDWP). |
=dap, =cdp | Nur JavaScript-Tests. |
Syntax: Debugging. Eine unbekannte Option oder ein fehlender Wert schlägt fehl, bevor etwas läuft (Build-Tasks).
Einschränkungen
- Keine Erkennung von Python-Tests; führen Sie stattdessen unittest oder pytest aus (Python-Tests).
- JVM-Tests brauchen ein Manifest.
- Nicht implementiert:
node:test-Snapshots,mock.module, Watch-Modus, programmatischesrun(),node:test/reporters.
Unterstützte API: Node-Test-API.
Beispiele
Mit einer Vorlage beginnen:
elide init --template java # Java app with a JUnit test
elide init --template ktjvm # Kotlin app with a test