اختبار 1 2 3

تضيف مجموعة شاملة من الاختبارات قوة إلى كودك أثناء التطوير وتوفر Truffle إطار عمل اختبارًا آليًا يجعل إضافة هذا إلى مشروعك أمرًا سهلاً.

في الأمثلة التالية ، سنكتب اختباراتنا بلغة JavaScript ، على الرغم من أن Truffle يدعم أيضًا الاختبارات القائمة على Solidity. تحقق مما يلي لمعرفة متى يمكنك استخدام أحدهما على الآخر.

جميع الاختبارات الخاصة بك موجودة في دليل اختبارات مخصص ، والذي يتم إنشاؤه تلقائيًا إذا استخدمت truffle init لتهيئة مشروعك ، على الرغم من أنه يمكنك بالطبع إنشاء واحد بنفسك.

ارجع إلى مجلد ملف SimpleStorage الذي أنشأناه في مقال سابق ، “الغوص العميق في Truffle Suite“. لإنشاء الاختبار الأول الخاص بك لـ SimpleStorage ، قم بتشغيل ما يلي:

truffle create test SimpleStorage

بعد ذلك ، يمكنك ببساطة تشغيل ما يلي لتشغيل مجموعة الاختبار.

truffle test

من الجدير بالذكر أن إطار عمل الاختبار سوف يقوم مؤقتًا بتدوير Ganache الخاص به والذي يتم من خلاله تشغيل الاختبارات ، وبالتالي التأكد من أنه لا يلوث أي مثيلات حالية قد تكون قيد التشغيل.

دعونا نحاول تشغيله مرة أخرى باختبار أكثر وضوحا. لا تتردد في نسخ ما يلي ولصقه في الاختبار الخاص بك وحاول تشغيل اختبار الكمأة مرة أخرى.

contract("SimpleStorage", function (/* accounts */) {
    it("should assert true", async function () {
    const simpleStorage = await SimpleStorage.deployed();
    await simpleStorage.set(42);

return assert.equal(
  await simpleStorage.get(),
  42
    );
 });
});

كل شيء يسير على ما يرام يجب أن ينجح كل شيء مرة أخرى وسترى نتيجة مماثلة لما يلي:

Contract: SimpleStorage
✓ should assert true (132ms)
1 passing (167ms)

كما يمكنك أن تستنتج  من المثال أعلاه ، تتم كتابة الاختبارات عادةً باستخدام نمط AAA (ترتيب ، فعل ، تأكيد). بالإضافة إلى ذلك ، يمكنك الوصول إلى مجموعة الحسابات والوصول إلى مكتبة الويب 3.

يمكن العثور على مزيد من التفاصيل في الاختبارات هنا.

معالجة Bugs بإستخدام Debugger

يعد تصحيح الأخطاء جزءًا مهمًا من أي دورة حياة لتطوير البرامج ويُشحن Truffle مع مصحح أخطاء تفاعلي قائم على CLI لمساعدتك في القضاء على تلك الأخطاء المزعجة.

يتم دائمًا إنشاء مثيل التصحيح من الجزء الخلفي من تجزئة المعاملة (tx) (كما رأينا تم إرجاعه عندما استدعينا storage.set (42) في المثال السابق). على سبيل المثال:

{
tx: '0x46e4bb35108e5ecf7ff656008295fda572a753476d5e04c286fcdb7868447dd6',
receipt: {
    transactionHash: '0x46e4bb35108e5ecf7ff656008295fda572a753476d5e04c286fcdb7868447dd6',
    transactionIndex: 0,
    blockHash: '0x85dbdf5d71194cb0d841d58bbac283ccf078ce0ebe1c054c6c2ab76442459894',
    blockNumber: 9,
    from: '0x5ca1605d4671669b38f7e37c881ed996ede5ac68',
    to: '0x524b2860a2489e385c5e12537f58d5a09a9d33ab',
...
}ccccccccccccccccccccccccccccccccccccccccc

تشغيل Debugger

بافتراض أن لدينا تجزئة معاملة صالحة ، يتم استدعاء مصحح الأخطاء ببساطة على النحو التالي. لاحظ أنك ستحتاج إلى لصق تجزئة لمعاملة موجودة في السلسلة التي تصحح الأخطاء وفقًا لها.

truffle debug 0x4a1dcabb384e6ca1b5091495349603499fc2022e5832efdb53f872b6ff23a1c0

بافتراض أن كل شيء جيد ، يجب أن ترى الآن الإخراج التالي (لاحظ أن القائمة الكاملة للأوامر قد تم اقتطاعها للإيجاز):

Starting Truffle Debugger...

Addresses affected:
0x6cA2F11a43b2B8f4DCE7De62f8Dc03f8E12BC48F - SimpleStorage

Commands:
(enter) last command entered (step next)
(o) step over, (i) step into, (u) step out, (n) step next
(c) continue until breakpoint, (Y) reset & continue to previous error
(y) (if at end) reset & continue to final error
(;) step instruction (include number to step multiple)

SimpleStorage.sol:

2: pragma solidity >=0.4.21 <0.7.0;
3:
4: contract SimpleStorage {
 ^^^^^^^^^^^^^^^^^^^^^^^^

يمكنك الآن البدء في التنقل عبر الكود الخاص بك بطريقة مشابهة لتلك الخاصة بأي مصحح أخطاء تقليدي. كما هو مذكور في مستندات Truffle على الرغم من أنه من الجدير بالذكر أنك “لا تقوم بتشغيل الكود في الوقت الفعلي ؛ بدلاً من ذلك ، فأنت تتخطى التنفيذ التاريخي لتلك المعاملة ، وتعيين هذا التنفيذ على الكود المرتبط به “.

في المثال أعلاه ، يؤدي الخطو عدة مرات على العقد SimpleStorage.sol الخاص بنا قد مكننا من  رؤية متغير الحالة المخزنة لدينا و الذي يتم تعيين قيمه جديده له.

SimpleStorage.sol:

7:   event setEvent(uint newValue);
8:
9:   function set(uint x) public {
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

debug(develop:0x8bd62b08...)> o

SimpleStorage.sol:

8:
9:   function set(uint x) public {
10:     storedData = x;

التصحيح في الاختبار

أخيرًا ، الميزة المتاحة اعتبارًا من Truffle v5.1 هي in-test debugging. يمكّنك هذا بشكل أساسي من مقاطعة اختباراتك ببساطة عن طريق لف سطر معين مع await debug().

مزيد من التفاصيل حول تصحيح الأخطاء أثناء الاختبار بمثال بسيط هنا.

إضافة تعليق