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é:
Où est l'erreur ?
Je dois utiliser le mot-clé « contenir » ou « inclure » ?
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 :
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
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 :