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),
)