Mycroft-core: Problème de test de comportement : « Alors la réponse doit contenir|inclure » ​​ne fonctionne pas

Créé le 30 sept. 2020  ·  5Commentaires  ·  Source: MycroftAI/mycroft-core

J'essaie d'écrire un test pour mes compétences.
J'utilise le framework Behave.
Dans la documentation mycroft, quand est expliqué comment écrire un test avec Behave, il est possible de vérifier si la réponse mycroft contient ou non un mot spécifique.
Mais toutes les manières présentées ne fonctionnent pas pour moi.

J'ai essayé:

  • Ensuite, la réponse "mycroft-skill" doit contenir [mot]
  • Ensuite, "mycroft-skill" devrait répondre avec dialog [dialog file] Mais la réponse devrait inclure [word]
  • Ensuite, "mycroft-skill" doit répondre avec dialog [dialog file] Ensuite, la réponse "mycroft-skill" doit inclure [word]
  • Ensuite, "mycroft-skill" devrait répondre avec dialog [dialog file] Mais la réponse "mycroft-skill" devrait inclure [word]
  • Ensuite, "mycroft-skill" devrait répondre avec dialog [dialog file] Mais la réponse devrait contenir [word]
  • Ensuite, "mycroft-skill" doit répondre avec dialog [fichier de dialogue] Ensuite, la réponse "mycroft-skill" doit contenir [word]
  • Ensuite, "mycroft-skill" devrait répondre avec dialog [dialog file] Mais la réponse "mycroft-skill" devrait contenir [word]

Où est l'erreur ?
Je dois utiliser le mot-clé « contenir » ou « inclure » ?

For discussion Enhancement - proposed help wanted

Commentaire le plus utile

Hé, j'ai changé cet exemple dans la doc. C'était une erreur de ma part.

Les étapes plus larges de « réponse mycroft » sont utiles lorsque vous ne vous souciez pas vraiment de la compétence qui répond tant que vous obtenez une bonne réponse. Par exemple, poser une question de connaissances générales comme la hauteur de la tour Eiffel - cela pourrait être DuckDuckGo, Wikipedia ou Wolfram Alpha qui répond, mais de toute façon, c'est toujours une interaction réussie.

Merci d'avoir soulevé le problème, je pense que ce sont tous de bons candidats à ajouter en tant que nouvelles étapes :

  • alors la réponse {compétence} doit contenir "{text}"
  • alors la réponse {compétence} ne doit pas contenir "{text}"
  • alors la réponse mycroft ne doit pas contenir "{text}"

Tous les 5 commentaires

Salut semble que la syntaxe pour contenir un mot devrait être

Then mycroft reply should contain "SOMETHING CLEVER"

Où SOMETHING CLEVER est la réponse intelligente attendue de mycroft :)

Voir ici pour la définition et un exemple peut être trouvé dans la compétence wiki.

Je n'ai pas vu d'étape "ne devrait pas inclure", je la vois référencée dans la doc mais je pense que c'est principalement un exemple...

Je pense que le problème est le plus simple.
Si vous notez la définition de "should contains" n'utilisez pas l'attribut {skill} comme l'autre étape, donc pour utiliser cette étape, nous devons écrire "Then mycroft..." et non "Then {skillname}..."

Comparez deux cette définition...
@then('la réponse mycroft doit contenir "{text}"')
et pas comme l'autre étape
@then('"{skill}" devrait répondre avec exactement "{text}"')

Hé, j'ai changé cet exemple dans la doc. C'était une erreur de ma part.

Les étapes plus larges de « réponse mycroft » sont utiles lorsque vous ne vous souciez pas vraiment de la compétence qui répond tant que vous obtenez une bonne réponse. Par exemple, poser une question de connaissances générales comme la hauteur de la tour Eiffel - cela pourrait être DuckDuckGo, Wikipedia ou Wolfram Alpha qui répond, mais de toute façon, c'est toujours une interaction réussie.

Merci d'avoir soulevé le problème, je pense que ce sont tous de bons candidats à ajouter en tant que nouvelles étapes :

  • alors la réponse {compétence} doit contenir "{text}"
  • alors la réponse {compétence} ne doit pas contenir "{text}"
  • alors la réponse mycroft ne doit pas contenir "{text}"

D'accord. Merci beaucoup. Maintenant, il est clair comment utiliser l'étape then_contains.
J'ai aussi un problème avec cet exemple :

`Caractéristique : météo actuelle
Scénario : Température à 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"`

Lorsque j'utilise But ou And, il ne semble pas que la vérification du mot que la réponse doit contenir soit effectuée sur la réponse précédente, mais il semble que cela fonctionne comme d'habitude
Then mycroft reply should contain... , il semble donc qu'ussign But|And, se comporte également pour une nouvelle réponse pour vérifier si la réponse contient le mot spécifique.
De même, dans la définition de l'étape de comportement, il n'y a aucune référence à une étape de contenu qui fonctionne sur une réponse précédente avec le mot-clé And ou But.

Éditer:

Ce comportement est le comportement normal de se comporter.
But et And ne fonctionnent pas sur la réponse précédente, mais ils sont utiles pour rendre le test plus lisible.
Si vous écrivez

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

Est-ce le même de

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

Donc and|but sont remplacés par then|given selon le type de l'étape précédente, si l'étape précédente est une étape then sera remplacé par then sinon par given .

Ainsi, dans le cas où then_contain est le même, la vérification est effectuée sur un nouvel énoncé parlé et non sur le précédent.
Ceci aussi parce que le bus de messages mycroft n'enregistre pas les réponses données, donc lorsqu'une réponse est consommée, il n'est pas possible d'y avoir accès.

Voir pull request #2711 et issue #2714

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

InconsolableCellist picture InconsolableCellist  ·  8Commentaires

beemorris picture beemorris  ·  6Commentaires

Ahmed-Benj picture Ahmed-Benj  ·  7Commentaires

ryanleesipes picture ryanleesipes  ·  4Commentaires

WSLUser picture WSLUser  ·  9Commentaires