أحاول كتابة اختبار لمهاراتي.
أنا أستخدم إطار العمل Behave.
في وثائق mycroft ، عندما يتم شرح كيفية كتابة اختبار باستخدام Behave ، يتم عرض إمكانية التحقق مما إذا كان رد mycroft يحتوي على كلمة معينة أم لا.
لكن كل الطرق المقدمة لا تعمل معي.
حاولت:
أين الخطأ؟
لا بد لي من استخدام الكلمة الرئيسية "تحتوي على" أو "تشمل"؟
مرحبا يبدو أن بناء الجملة لاحتواء كلمة ينبغي أن يكون
Then mycroft reply should contain "SOMETHING CLEVER"
حيث يعتبر SOMETHING CLEVER هو الاستجابة الذكية المتوقعة من mycroft :)
انظر هنا للحصول على التعريف ويمكن العثور على مثال في مهارة الويكي.
لم أشاهد الخطوة "يجب عدم التضمين" ، وأرى أنها مُشار إليها في المستندات ولكن أعتقد أن هذا بشكل أساسي مثال ...
أعتقد أن المشكلة ببساطة.
إذا لاحظت أن تعريف "يجب أن يحتوي على" لا تستخدم السمة {المهارات} مثل الخطوة الأخرى ، لذلك لاستخدام هذه الخطوة ، يجب أن نكتب "ثم mycroft ..." وليس "ثم {المهارات اسم} ..."
قارن بين هذا التعريف ...
then (يجب أن يحتوي رد mycroft على "{text}" ')
وليس مثل الخطوة الأخرى
@ ثم ('"{المهارات}" يجب الرد بـ "{text}"' بالضبط)
مرحبًا ، لقد غيرت هذا المثال في المستندات. وهذا كان خطأ من جانبي.
تعد خطوات "رد mycroft" الأوسع مفيدة عندما لا تهتم حقًا بأي مهارة تستجيب طالما أنك تحصل على إجابة جيدة. على سبيل المثال ، طرح سؤال حول المعرفة العامة مثل ارتفاع برج إيفل - قد تكون الإجابة هي DuckDuckGo أو Wikipedia أو Wolfram Alpha ، ولكن في كلتا الحالتين لا يزال التفاعل ناجحًا.
شكرًا لإثارة المشكلة ، أعتقد أن هؤلاء جميعًا مرشحون جيدون للإضافة كخطوات جديدة:
نعم. شكرا جزيلا. من الواضح الآن كيفية استخدام then_contains step.
لدي أيضًا مشكلة في هذا المثال:
"الميزة: الطقس الحالي
السيناريو: درجة الحرارة في باريس
Given an english speaking user
And user is located in Paris
When the user says "how hot will it be today"
Then "mycroft-weather" should reply with dialog from "current.high.temperature.dialog"
But mycroft reply should contain "Paris"`
عندما أستخدم "لكن أو و" لا يبدو أن التحقق من الكلمة التي يجب أن يحتوي عليها الرد قد تم إجراؤه في الرد السابق ، ولكن يبدو أنه يعمل كالمعتاد
Then mycroft reply should contain...
، لذلك يبدو أنه يستخدم أيضًا ولكن | ويتصرف في رد جديد للتحقق مما إذا كان الرد يحتوي على كلمة معينة.
أيضًا في تعريف خطوة السلوك ، لا يوجد مرجع حول خطوة تحتوي على رد سابق باستخدام الكلمة الأساسية "و" أو "لكن".
يحرر:
هذا السلوك هو السلوك الطبيعي للتصرف.
But
و And
على الرد السابق ، لكنهما مفيدان لجعل الاختبار أكثر قابلية للقراءة.
إذا كنت تكتب
"Then "myskil" should reply with dialog "myskill.dialog"
"And|But "myskill" should reply with dialog "myskillother.dialog"
هو نفسه من
"Then "myskil" should reply with dialog "myskill.dialog"
"Then "myskill" should reply with dialog "myskillother.dialog"
لذلك ، يتم استبدال and|but
بـ then|given
اعتمادًا على نوع الخطوة السابقة ، إذا كانت الخطوة السابقة then
الخطوة فسيتم استبدالها بـ then
وإلا بـ given
.
لذلك في حالة then_contain هو نفسه ، يتم التحقق من الكلام المنطوق الجديد وليس الكلام السابق.
هذا أيضًا لأن ناقل الرسائل mycroft لا يحفظ الردود المقدمة ، لذلك عندما يتم استهلاك استجابة ، لا يكون من الممكن الوصول إليها.
انظر طلب السحب رقم 2711 والإصدار رقم 2714
التعليق الأكثر فائدة
مرحبًا ، لقد غيرت هذا المثال في المستندات. وهذا كان خطأ من جانبي.
تعد خطوات "رد mycroft" الأوسع مفيدة عندما لا تهتم حقًا بأي مهارة تستجيب طالما أنك تحصل على إجابة جيدة. على سبيل المثال ، طرح سؤال حول المعرفة العامة مثل ارتفاع برج إيفل - قد تكون الإجابة هي DuckDuckGo أو Wikipedia أو Wolfram Alpha ، ولكن في كلتا الحالتين لا يزال التفاعل ناجحًا.
شكرًا لإثارة المشكلة ، أعتقد أن هؤلاء جميعًا مرشحون جيدون للإضافة كخطوات جديدة: