كيف تبدأ اختبار سلسلة Hyperledger Fabric Nodejs

ملاحظة: منذ كتابة هذا المقال ، مرت وحدتنا ببعض التغييرات والتحديثات. يرجى التحقق من جيثب للحصول على أحدث المعلومات.

هذه المقالة هي جزء ثان من مقالاتنا "كيفية Hyperledger Fabric nodejs chaincode". وكان المقال الأخير حول تطوير chaincode ، الذي كتبنا حزمة ل. يجعل الكتابة chaincode أسرع بكثير.

لم يكن هناك أي حل جيد لاختبار سلسلة العقدة بعد. هذا هو السبب في أننا أنشأنا حزمة mockstub. بصراحة ، أنا لا أحب الاختبار أيضًا. ولكن نظرًا لأن ترقية chaincode ليست الأسرع في العالم ، فهناك الكثير من الوقت لحفظ الاختبار. والأهم من ذلك أيضًا ، نظرًا لأن Blockchain غير ثابت ومن المفترض أن يكون آمنًا لأن الكود موجود على الشبكة ، فإننا لا نضع العيوب في الكود لدينا.

اختبار باستخدام موكستوب لدينا

هذا ChaincodeMockStub هو تطبيق وهمية من كعب نسيج الرقائق. هذا يعني أنه يمكنك اختبار chaincode دون بدء الشبكة الخاصة بك بالفعل. انها تنفذ تقريبا كل وظيفة كعب الروتين الفعلي ، ولكن في الذاكرة. لا يتم دعم هذه الوظائف (حتى الآن): getHistoryForKey ، getBinding ، getTransient ، setEvent ، getChannelID.

كيفية الاختبار

إضافة غزل @ theledger / النسيج وهمية ، كعب --dev

تعمل سلسلة اختبار Nodejs chaincode بشكل مشابه للاختبار باستخدام نموذج المقلد في سلسلة المفاتيح Golang. يحتوي ChaincodeMockStub على دالات وهمية وهمية mockInitand mockInvoke. عن طريق تمرير chaincode الخاص بك ، فإنه يسخر من المعاملات وتنفيذ استدعاء / الحرف الأول على غرار الطريقة التي سيتم استدعاء في الأصل.

استجابة

سوف ترجع كل هذه الدالات ChaincodeResponse. باستخدام هذا الكائن ChaincodeResponse ، يمكننا اختبار ما إذا كان الإجراء أرجع النتيجة المتوقعة أم لا.

عند النجاح ، ستبدو الاستجابة هكذا. تقوم دائمًا بإرجاع الحالة وإذا كانت الطريقة تُرجع شيئًا ما ، فستتضمن الاستجابة أيضًا حمولة.

{
    "الحالة": 200 ،
    "الحمولة": 
}

على خطأ ، ستبدو الاستجابة هكذا. سيتم استبدال الحمولة بحقل رسالة يحتوي على الخطأ.

{
    "الحالة": 500 ،
    "message": 
}

ستكون قادرًا على التحقق من الاستجابة باستخدام شيء مثل تشاي. التحويل المستخدم هنا هو المساعد الذي يتم شحنه مع mockstub لتسلسل البيانات وإلغاء تسلسلها بسهولة.

تشمل chaincode الخاص بك

في الجزء العلوي من ملف الاختبار الخاص بك ، يمكنك استيراد و إنشاء مثيل السلسلة ، يجب القيام بذلك مرة واحدة فقط. تأكد من فصل shim.start () من chaincode الخاص بك. وإلا سيتم تنفيذه قبل الاختبار وستحدث الأخطاء. مثال يمكن العثور عليه في boilerplate شبكتنا.

تشمل موكستوب

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

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

مثال

اختبار سيبدو هكذا. الآن نحن بحاجة فقط إلى بعض منطق الاختبار.

اختبار التهيئة

يمكن اختبار الأسلوب Init () باستخدام الدالة mockStub.mockInit (txId: string ، args: string []). سيؤدي ذلك إلى إنشاء معاملة وهمية جديدة واستدعاء طريقة init على chaincode الخاص بك. ونظرًا لأن الحرف الأول يحدث عند إنشاء مثيله الخاص بك ، فأنت عمومًا لا ترغب في إرجاع أي شيء. لذلك نحن نتحقق من حالة الاستجابة هنا.

اختبار استدعاء

يمكن اختبار الأسلوب Invoke () باستخدام الدالة mockStub.mockInvoke (txId: string ، args: string []). سيؤدي ذلك إلى إنشاء معاملة وهمية جديدة واستدعاء طريقة الاستدعاء على chaincode الخاص بك. سوف يرسل العميل إما استعلامًا أو استدعاءًا ، ولكن يقبل chaincode كلاهما كدعوة. في اختباراتك ، لا يوجد أي فرق ، حيث يمكن لكل من الاستعلامات والاستعلامات إرجاع نتيجة.

استعلام الاستعلام

اختبار createCar

TheLedger - خبراء / استشاري Blockchain في بلجيكا وهولندا.

اختبار الطبقات الفردية

لا يلزمك الاختبار فقط باستخدام mockInvoke و mockInit. يمكنك الاتصال مباشرة بالطرق الموجودة على سلسلة المفاتيح أو على mockStub إذا كنت تريد ذلك بالفعل.

اختبار باستخدام Mychaincode مباشرة

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

خاتمة

أسمعك ، أنا أكره كتابة الاختبارات أيضًا. لكنني أعتقد أن نسيج الأقمشة كان بحاجة فعلاً لهذا أود إضافته إلى حزمة الأقمشة الفعلية في نهاية المطاف ، على غرار الحزمة الأصلية التي يتم شحنها مع رقة Golang. أو على الأقل نقل المحافظة إلى مؤسسة Hyperledger. من أجل القيام بذلك ، لا يزال هناك بعض الوظائف التي يجب تنفيذها. وتحتاج الحزمة إلى اختبار شامل ، لذلك أنا أشجعك على المساهمة في ذلك! #makeTestingGreatAgain

نحن لسنا متخصصين فقط في نسيج Hyperledger. نحن أيضا القيام بمبيعات رمزية ، ومراجعات العقود الذكية وغيرها من الأشياء الرائعة. تواصل مع TheLedger.

ماذا تقرأ بعد ذلك

→ Hyperledger Fabric & couchdb ، استفسارات رائعة وأين تجد ...

→ قائمة برعاية موارد النسيج Hyperledger

→ إحضار الخاصة بك قياسي على Blockchain