يشغّل الأمر elide test ملفات node:test المكتوبة بلغتي JavaScript و TypeScript واختبارات JUnit.
elide testيجعل الاختبار الفاشل رمز الخروج غير صفري.
JavaScript و TypeScript
تستخدم الاختبارات واجهة 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واجهات 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الموجود على مسار أصناف الاختبار على--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: تشغيل الاختبارات التي تطابق وسومها؛ ويُجمع التكرار بـ OR. |
--exclude-tag=EXPR | JVM: تخطي الاختبارات التي تطابق وسومها؛ ويُجمع التكرار بـ AND. |
--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 (المنفذ 4711 لـ DAP، و 1337 لـ CDP). |
صيغة --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.
الواجهة المدعومة: واجهة اختبارات Node.
أمثلة
ابدأ من قالب:
elide init --template java # Java app with a JUnit test
elide init --template ktjvm # Kotlin app with a test