Mycroft-core: Verhaltenstestproblem: "Dann sollte die Antwort enthalten|einschließen" funktioniert nicht

Erstellt am 30. Sept. 2020  ·  5Kommentare  ·  Quelle: MycroftAI/mycroft-core

Ich versuche, einen Test für meine Fähigkeiten zu schreiben.
Ich verwende das Behave-Framework.
In der mycroft-Dokumentation, wann erklärt wird, wie ein Test mit Behave geschrieben wird, wird eine Möglichkeit gezeigt, zu überprüfen, ob die mycroft-Antwort ein bestimmtes Wort enthält oder nicht.
Aber alle vorgestellten Möglichkeiten funktionieren bei mir nicht.

Ich habe es versucht:

  • Dann sollte die Antwort "mycroft-skill" [Wort] enthalten.
  • Dann sollte "mycroft-skill" mit dialog [dialog file] antworten, aber die Antwort sollte [word] enthalten
  • Dann sollte "mycroft-skill" mit dialog [dialog file] antworten. Dann sollte "mycroft-skill" antworten [word]
  • Dann sollte "mycroft-skill" mit dialog [dialog file] antworten, aber "mycroft-skill" sollte [word] enthalten
  • Dann sollte "mycroft-skill" mit dialog [dialog file] antworten, aber die Antwort sollte [word] enthalten
  • Dann sollte "mycroft-skill" mit dialog [dialog file] antworten. Dann sollte "mycroft-skill" antworten [word]
  • Dann sollte "mycroft-skill" mit dialog [dialog file] antworten, aber "mycroft-skill" sollte [word] enthalten

Wo ist der Fehler?
Ich muss das Schlüsselwort "enthalten" oder "einschließen" verwenden?

For discussion Enhancement - proposed help wanted

Hilfreichster Kommentar

Hey, ich habe dieses Beispiel in der Dokumentation geändert. Das war ein Fehler meinerseits.

Die umfassenderen "Mycroft-Antwort"-Schritte sind nützlich, wenn es Ihnen eigentlich egal ist, welcher Skill antwortet, solange Sie eine gute Antwort erhalten. Stellen Sie zum Beispiel eine allgemeine Wissensfrage wie die Höhe des Eiffelturms - es könnte DuckDuckGo, Wikipedia oder Wolfram Alpha sein, die antworten, aber so oder so ist es immer noch eine erfolgreiche Interaktion.

Vielen Dank, dass Sie das Problem angesprochen haben. Ich denke, dies sind alles gute Kandidaten, die Sie als neue Schritte hinzufügen können:

  • dann sollte die Antwort von {skill} "{text}" enthalten
  • dann sollte die Antwort von {skill} nicht "{text}" enthalten
  • dann sollte die Antwort von mycroft nicht "{text}" enthalten

Alle 5 Kommentare

Hallo, scheint die Syntax für das Enthalten eines Wortes zu sein

Then mycroft reply should contain "SOMETHING CLEVER"

Wobei ETWAS CLEVER die erwartete clevere Antwort von mycroft ist :)

Siehe hier für die Definition und ein Beispiel finden Sie im Wiki-Skill.

Ich habe keinen Schritt "sollte nicht enthalten" gesehen, ich sehe, dass in den Dokumenten darauf verwiesen wird, aber ich denke, das ist hauptsächlich ein Beispiel ...

Ich denke, das Problem ist am einfachsten.
Wenn Sie die Definition von "sollte enthalten" beachten, verwenden Sie nicht das Attribut {skill} wie im anderen Schritt. Um diesen Schritt zu verwenden, müssen wir "Then mycroft... " und nicht "Then {skillname}..." schreiben.

Vergleichen Sie zwei dieser Definitionen ...
@then('mycroft-Antwort sollte "{text}"' enthalten)
und nicht wie der andere schritt
@then('"{skill}" sollte mit genau "{text}"' antworten)

Hey, ich habe dieses Beispiel in der Dokumentation geändert. Das war ein Fehler meinerseits.

Die umfassenderen "Mycroft-Antwort"-Schritte sind nützlich, wenn es Ihnen eigentlich egal ist, welcher Skill antwortet, solange Sie eine gute Antwort erhalten. Stellen Sie zum Beispiel eine allgemeine Wissensfrage wie die Höhe des Eiffelturms - es könnte DuckDuckGo, Wikipedia oder Wolfram Alpha sein, die antworten, aber so oder so ist es immer noch eine erfolgreiche Interaktion.

Vielen Dank, dass Sie das Problem angesprochen haben. Ich denke, dies sind alles gute Kandidaten, die Sie als neue Schritte hinzufügen können:

  • dann sollte die Antwort von {skill} "{text}" enthalten
  • dann sollte die Antwort von {skill} nicht "{text}" enthalten
  • dann sollte die Antwort von mycroft nicht "{text}" enthalten

OK. Vielen Dank. Jetzt ist klar, wie der then_contains-Schritt verwendet wird.
Ich habe auch ein Problem mit diesem Beispiel:

`Feature: aktuelles Wetter
Szenario: Temperatur in Paris

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"`

Wenn ich Aber oder Und verwende, scheint die Überprüfung des Wortes, das die Antwort enthalten muss, nicht für die vorherige Antwort durchgeführt zu werden, sondern scheint wie gewohnt zu funktionieren
Then mycroft reply should contain... , so scheint es, dass auch usign But|And, behave für eine neue Antwort sorgt, um zu überprüfen, ob die Antwort das bestimmte Wort enthält.
Auch in der Definition des Verhaltensschritts gibt es keinen Hinweis auf einen Enthalten-Schritt, der eine vorherige Antwort mit dem Schlüsselwort And oder Aber bearbeitet.

Bearbeiten:

Dieses Verhalten ist das normale Verhalten von Verhalten.
But und And funktionieren bei der vorherigen Antwort nicht, aber sie sind nützlich, um den Test besser lesbar zu machen.
Wenn du schreibst

"Then "myskil" should reply with dialog "myskill.dialog"
"And|But "myskill" should reply with dialog "myskillother.dialog"

Ist das gleiche von

"Then "myskil" should reply with dialog "myskill.dialog"
"Then "myskill" should reply with dialog "myskillother.dialog"

So and|but sind sein Ersatz mit then|given , je nach Art des vorherigen Schrittes, wenn die vorherige Schritt a then wird Ersatz Schritt mit then sonst mit given .

Wenn also then_contain gleich ist, wird die Prüfung bei einer neuen gesprochenen Äußerung durchgeführt, nicht bei der vorherigen.
Dies auch, weil der Mycroft-Nachrichtenbus die gegebenen Antworten nicht speichert, so dass, wenn eine Antwort vollständig ist, kein Zugriff darauf möglich ist.

Siehe Pull-Request #2711 und Issue #2714

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen