Mycroft-core: Problema de prueba de comportamiento: "Entonces la respuesta debe contener | incluir" no funciona

Creado en 30 sept. 2020  ·  5Comentarios  ·  Fuente: MycroftAI/mycroft-core

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é:

  • Entonces la respuesta de "mycroft-skill" debe contener [palabra]
  • Entonces "mycroft-skill" debería responder con un diálogo [archivo de diálogo] Pero la respuesta debería incluir [palabra]
  • Entonces "mycroft-skill" debería responder con un diálogo [archivo de diálogo] Luego, la respuesta de "mycroft-skill" debería incluir [palabra]
  • Entonces "mycroft-skill" debería responder con un diálogo [archivo de diálogo] Pero la respuesta de "mycroft-skill" debería incluir [palabra]
  • Entonces "mycroft-skill" debería responder con un diálogo [archivo de diálogo] Pero la respuesta debería contener [palabra]
  • Entonces "mycroft-skill" debe responder con un diálogo [archivo de diálogo] Luego, la respuesta de "mycroft-skill" debe contener [palabra]
  • Entonces "mycroft-skill" debería responder con un diálogo [archivo de diálogo] Pero la respuesta de "mycroft-skill" debería contener [palabra]

¿Dónde está el error?
¿Tengo que utilizar la palabra clave "contener" o "incluir"?

For discussion Enhancement - proposed help wanted

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:

  • entonces la respuesta de {skill} debe contener "{text}"
  • entonces la respuesta de {skill} no debe contener "{text}"
  • entonces la respuesta de mycroft no debe contener "{text}"

Todos 5 comentarios

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:

  • entonces la respuesta de {skill} debe contener "{text}"
  • entonces la respuesta de {skill} no debe contener "{text}"
  • entonces la respuesta de mycroft no debe contener "{text}"

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

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

beemorris picture beemorris  ·  6Comentarios

ryanleesipes picture ryanleesipes  ·  4Comentarios

fermulator picture fermulator  ·  6Comentarios

tiagochiavericosta picture tiagochiavericosta  ·  6Comentarios

krisgesling picture krisgesling  ·  5Comentarios