dart-test

dart pub add dev:tracera_test

يتطلب Dart ≥ 3.8 وpackage:test ≥ 1.25 (انظر محوّلات الاختبار الآلي). tracera_test على pub.dev.

متغيرات البيئة ووضع التشغيل: محوّلات الاختبار الآلي.

استدعِ installTracera() مرة واحدة في بداية الدالة main. أبقِ استيرادات package:test القياسية؛ أضف فقط installTracera واستدعاءات tracera:

import 'package:test/test.dart';
import 'package:tracera/tracera.dart' as tracera;
import 'package:tracera_test/tracera_test.dart';

void main() {
  installTracera();

  test('user can sign in', () {
    tracera.step('open login', () {
      // ...
    });
  }, tags: ['tracera-id-42']);
}

ربط testCaseId وautotestName

أضف الوسم tracera-id-‹id› إلى test أو group. أضف tracera-name-‹name› لتعيين autotestName. لا يمكن أن يحتوي وسم الاسم على مسافات؛ وللحصول على اسم بمسافات اربط الحالة داخل الاختبار عبر tracera.testCase. إذا لم يُحدَّد وسم الاسم، يأخذ autotestName قيمة اسم الاختبار في package:test.

test('user can sign in', () {
  // ...
}, tags: ['tracera-id-42', 'tracera-name-e2e_sign_in']);

test('user can sign out', () {
  tracera.testCase(43, 'e2e/sign out');
});

لإزالة تحذيرات package:test بشأن الوسوم غير المعرّفة، أدرج وسوم Tracera ضمن tags: في الملف dart_test.yaml.

Skip

استدعِ markTestSkipped('reason') داخل الاختبار. تُرسَل النتيجة بحالة Skipped ويُضاف السبب إلى النتيجة كـ comment.

test('checkout', () {
  markTestSkipped('needs a seeded account');
}, tags: ['tracera-id-42']);

الوسيط skip: في test أو group لا يُدرَج في التقرير.

الخطوات

استخدم tracera.step('…', () { … }). تذهب دالة setUp إلى الإعداد في النتيجة، وجسم الاختبار إلى الاختبار، ودالة tearDown إلى التنظيف. الخطوات داخل setUpAll / tearDownAll لا تُدرَج في التقرير.

setUp(() {
  tracera.step('open shop', () {});
});

test('checkout', () async {
  tracera.testCase(10);

  await tracera.step('add item', () async {
    tracera.step('nested leaf', () {});
  });
});

tearDown(() {
  tracera.step('close shop', () {});
});

التعليقات والأخطاء والمرفقات

الحدود وأنواع MIME المسموحة: محوّلات الاختبار الآلي.

تُضاف tracera.comment وtracera.error والمرفقات إلى الخطوة المفتوحة، أو إلى النتيجة إذا لم تكن هناك خطوة مفتوحة. tracera.attachmentFile يأخذ مسار ملف؛ وtracera.attachmentBytes يأخذ اسمًا وبايتات مع mimeType اختياري. تُرفَع المرفقات عند إرسال النتيجة.

tracera.comment('result-level note');
tracera.error('result-level error');
tracera.attachmentFile('test/fixtures/screenshot.png');
tracera.step('open login', () {
  tracera.comment('step note');
  tracera.attachmentBytes(
    'body.json',
    utf8.encode('{"ok":true}'),
    mimeType: 'application/json',
  );
});

الاختبارات ذات المعاملات

أنشئ test واحدًا لكل صف داخل حلقة. إذا لم يُحدَّد الاسم، يأخذ autotestName قيمة اسم الاختبار، لذا امنح كل صف عنوانًا مختلفًا. ولتحديد اسم لكل صف، مرّره إلى tracera.testCase:

for (final login in ['alice', 'bob']) {
  test('sign in as $login', () {
    tracera.testCase(7, 'login as $login');
  });
}

عند إعادة تشغيل الاختبار عبر retry: تُرسَل المحاولة الأخيرة فقط. وتتضمن علامة تبويب Env في النتيجة حينها DART_TEST_RETRY (انظر محوّلات الاختبار الآلي).