Ginkgo
go get github.com/tracera-dev/tracera-go/ginkgo
يتطلب Go ≥ 1.25 وGinkgo v2 (انظر محوّلات الاختبار الآلي). ginkgo على pkg.go.dev.
متغيرات البيئة ووضع التشغيل: محوّلات الاختبار الآلي.
استدعِ Register() مرة واحدة في ملف الـ suite:
import tracera_ginkgo "github.com/tracera-dev/tracera-go/ginkgo"
var _ = tracera_ginkgo.Register()
ربط testCaseId وautotestName
فضّل تسميات Ginkgo (Labels) — يعمل الربط حتى لو تخطّى الاختبار مبكرًا:
It("checks out", Label("tracera.id:42"), func() {
// …
})
It("checks out", Label("tracera.id:42", "tracera.name:e2e/checkout"), func() {
// …
})
أو اربط أمريًا عبر tracera.TestCase(42) / tracera.TestCase(42, "e2e/checkout").
Skip
استخدم تخطّي Ginkgo القياسي (Skip("…")). يُضاف سبب التخطّي إلى النتيجة كـ comment.
الخطوات
استخدم tracera.Step("…", func() { … }). الخطوات داخل BeforeEach / AfterEach تذهب إلى الإعداد / التنظيف في النتيجة؛ والخطوات داخل المواصفة إلى الاختبار. خطافات مستوى الـ suite (BeforeSuite / AfterSuite) لا تُبلَّغ.
BeforeEach(func() {
tracera.Step("open shop", func() {})
})
It("pays", Label("tracera.id:10"), func() {
tracera.Step("add item", func() {
tracera.Step("nested leaf", func() {})
})
})
التعليقات والأخطاء والمرفقات
الحدود وأنواع MIME المسموحة: محوّلات الاختبار الآلي.
استدعِ tracera.Comment وtracera.Error وtracera.AttachmentFile وtracera.AttachmentBytes — تُضاف إلى الخطوة المفتوحة أو إلى النتيجة.
إذا شغّلت goroutine واستدعيت فيها واجهات Tracera (الخطوات والتعليقات والأخطاء والمرفقات)، احفظ السياق أولًا على goroutine الاختبار ثم شغّل العامل بـ tracera.RunWithContext — وإلا لن تُدرَج هذه الاستدعاءات في التقرير:
ctx := tracera.GetContext()
go tracera.RunWithContext(ctx, func() {
tracera.Step("worker", func() { /* ... */ })
})
المجموعات المتوازية (ginkgo -p, --procs=N) تشارك تشغيل اختبار واحد عبر العمليات — بلا إعداد إضافي.
الاختبارات ذات المعاملات
استخدم DescribeTable / Entry في Ginkgo. ضع tracera.id: ثابتًا على Label (الجدول أو الإدخال). إذا لم يُحدَّد الاسم، فإن autotestName يأخذ قيمة اسم اختبار Ginkgo — امنح كل Entry عنوانًا خاصًا (مثل "one item" / "two items" أدناه). أو مرّر اسمًا إلى tracera.TestCase:
DescribeTable("checkout", Label("tracera.id:101"),
func(qty int) { /* ... */ },
Entry("one item", 1),
Entry("two items", 2),
)