Estoy tratando de escribir una prueba de mi habilidad.
Estoy usando el marco Behave.
En la documentación de mycroft, cuando se explica cómo escribir una prueba con Behave, se muestra la posibilidad de comprobar si la respuesta de mycroft contiene o no una palabra específica.
Pero todas las formas presentadas no funcionan para mí.
Lo intenté:
¿Dónde está el error?
¿Tengo que utilizar la palabra clave "contener" o "incluir"?
Hola, parece que la sintaxis para contener una palabra debería ser
Then mycroft reply should contain "SOMETHING CLEVER"
Donde ALGO INTELIGENTE es la respuesta inteligente esperada de mycroft :)
Consulte aquí la definición y se puede encontrar un ejemplo en la habilidad wiki.
No he visto un paso "no debería incluir", lo veo referenciado en los documentos, pero creo que es principalmente un ejemplo ...
Creo que el problema es más simple.
Si nota que la definición de "debería contener" no use el atributo {skill} como en el otro paso, entonces para usar este paso debemos escribir "Then mycroft ..." y no "Then {skillname} ..."
Compare dos esta definición ...
@then ('la respuesta de mycroft debe contener "{text}"')
y no como el otro paso
@then ('"{skill}" debería responder exactamente con "{text}"')
Oye, he cambiado ese ejemplo en los documentos. Ese fue un error de mi parte.
Los pasos más amplios de "respuesta mycroft" son útiles cuando en realidad no te importa qué habilidad responde siempre que obtengas una buena respuesta. Por ejemplo, hacer una pregunta de conocimiento general como la altura de la torre Eiffel; podría ser DuckDuckGo, Wikipedia o Wolfram Alpha la respuesta, pero de cualquier manera sigue siendo una interacción exitosa.
Sin embargo, gracias por plantear el problema, creo que todos estos son buenos candidatos para agregar como nuevos Pasos:
Está bien. Muchas gracias. Ahora está claro cómo usar el paso then_contains.
También tengo un problema con este ejemplo:
`Característica: clima actual
Escenario: temperatura en parís
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"`
Cuando uso Pero o Y no parece que la verificación de la palabra que debe contener la respuesta se realiza en la respuesta anterior, pero parece que funciona como de costumbre.
Then mycroft reply should contain...
, por lo que parece que también usign But | And, behave attends para una nueva respuesta para comprobar si la respuesta contiene la palabra específica.
Además, en la definición del paso de comportamiento no hay ninguna referencia sobre un paso de contenido que funcione en una respuesta anterior con la palabra clave Y o Pero.
Editar:
Este comportamiento es el comportamiento normal de comportarse.
But
y And
no funcionan en la respuesta anterior, pero son útiles para hacer más legible la prueba.
Si tú escribes
"Then "myskil" should reply with dialog "myskill.dialog"
"And|But "myskill" should reply with dialog "myskillother.dialog"
Es lo mismo de
"Then "myskil" should reply with dialog "myskill.dialog"
"Then "myskill" should reply with dialog "myskillother.dialog"
Entonces and|but
se sustituirán por then|given
dependiendo del tipo de paso anterior, si el paso anterior es un then
paso se sustituirá por then
contrario con given
.
Entonces, en el caso de then_contain es el mismo, la verificación se realiza en una nueva expresión hablada, no en la anterior.
Esto también porque el bus de mensajes mycroft no guarda las respuestas dadas, por lo que cuando una respuesta es consumida, no es posible tener acceso a ella.
Consulte la solicitud de extracción n. ° 2711 y el problema n. ° 2714
Comentario más útil
Oye, he cambiado ese ejemplo en los documentos. Ese fue un error de mi parte.
Los pasos más amplios de "respuesta mycroft" son útiles cuando en realidad no te importa qué habilidad responde siempre que obtengas una buena respuesta. Por ejemplo, hacer una pregunta de conocimiento general como la altura de la torre Eiffel; podría ser DuckDuckGo, Wikipedia o Wolfram Alpha la respuesta, pero de cualquier manera sigue siendo una interacción exitosa.
Sin embargo, gracias por plantear el problema, creo que todos estos son buenos candidatos para agregar como nuevos Pasos: