Mycroft-core: Problema de teste de comportamento: "Então a resposta deve conter | incluir" não funciona

Criado em 30 set. 2020  ·  5Comentários  ·  Fonte: MycroftAI/mycroft-core

Estou tentando escrever um teste para minha habilidade.
Estou usando o framework Behave.
Na documentação do mycroft quando é explicado como escrever um teste com Behave é mostrada a possibilidade de verificar se a resposta do mycroft contém ou não uma palavra específica.
Mas todas as formas apresentadas não funcionam para mim.

Tentei:

  • Então, a resposta "mycroft-skill" deve conter [palavra]
  • Então, "mycroft-skill" deve responder com diálogo [arquivo de diálogo] Mas a resposta deve incluir [palavra]
  • Em seguida, "mycroft-skill" deve responder com diálogo [arquivo de diálogo] Em seguida, a resposta "mycroft-skill" deve incluir [palavra]
  • Em seguida, "mycroft-skill" deve responder com diálogo [arquivo de diálogo] Mas a resposta "mycroft-skill" deve incluir [palavra]
  • Então, "mycroft-skill" deve responder com diálogo [arquivo de diálogo] Mas a resposta deve conter [palavra]
  • Em seguida, "mycroft-skill" deve responder com diálogo [dialog file] Em seguida, a resposta "mycroft-skill" deve conter [palavra]
  • Em seguida, "mycroft-skill" deve responder com diálogo [arquivo de diálogo] Mas a resposta "mycroft-skill" deve conter [palavra]

Onde está o erro?
Tenho que usar a palavra-chave "conter" ou "incluir"?

For discussion Enhancement - proposed help wanted

Comentários muito úteis

Ei, eu mudei esse exemplo nos documentos. Isso foi um erro da minha parte.

As etapas mais amplas de "resposta mycroft" são úteis quando você realmente não se importa com qual Habilidade responde, desde que obtenha uma boa resposta. Por exemplo, fazer uma pergunta de conhecimento geral, como a altura da Torre Eiffel - pode ser DuckDuckGo, Wikipedia ou Wolfram Alpha essa resposta, mas de qualquer forma ainda é uma interação bem-sucedida.

Obrigado por levantar a questão, porém, acho que todos esses são bons candidatos para adicionar como novas etapas:

  • então {skill} a resposta deve conter "{text}"
  • então a resposta de {skill} não deve conter "{text}"
  • então a resposta mycroft não deve conter "{text}"

Todos 5 comentários

Oi parece que a sintaxe para conter uma palavra deve ser

Then mycroft reply should contain "SOMETHING CLEVER"

Onde ALGO CLARO é a resposta esperta esperada de mycroft :)

Veja aqui a definição e um exemplo pode ser encontrado na habilidade wiki.

Não vi uma etapa "não deve incluir", vejo que é referenciada nos documentos, mas acho que é principalmente um exemplo ...

Acho que o problema é mais simples.
Se você notar que a definição de "deve conter", não use o atributo {skill} como a outra etapa, então, para usar esta etapa, devemos escrever "Then mycroft ..." e não "Then {skillname} ..."

Compare dois esta definição ...
@then ('a resposta do mycroft deve conter "{text}"')
e não como a outra etapa
@then ('"{skill}" deve responder exatamente com "{text}"')

Ei, eu mudei esse exemplo nos documentos. Isso foi um erro da minha parte.

As etapas mais amplas de "resposta mycroft" são úteis quando você realmente não se importa com qual Habilidade responde, desde que obtenha uma boa resposta. Por exemplo, fazer uma pergunta de conhecimento geral, como a altura da Torre Eiffel - pode ser DuckDuckGo, Wikipedia ou Wolfram Alpha essa resposta, mas de qualquer forma ainda é uma interação bem-sucedida.

Obrigado por levantar a questão, porém, acho que todos esses são bons candidatos para adicionar como novas etapas:

  • então {skill} a resposta deve conter "{text}"
  • então a resposta de {skill} não deve conter "{text}"
  • então a resposta mycroft não deve conter "{text}"

OK. Muito obrigado. Agora está claro como usar a etapa then_contains.
Também tenho um problema com este exemplo:

`Recurso: clima atual
Cenário: Temperatura em 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"`

Quando eu uso Mas ou E não parece que a verificação da palavra que a resposta deve conter é feita na resposta anterior, mas parece que funciona normalmente
Then mycroft reply should contain... , pelo que parece que também usign But | E, comporte-se a uma nova resposta para verificar se a resposta contém a palavra específica.
Também na definição da etapa de comportamento não há referência sobre uma etapa de contenção que funcione em uma resposta anterior com a palavra-chave And ou But.

Editar:

Esse comportamento é o comportamento normal de comportamento.
But e And não funcionam na resposta anterior, mas são úteis para tornar o teste mais legível.
Se você escrever

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

É o mesmo de

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

Portanto, and|but devem ser substituídos por then|given dependendo do tipo da etapa anterior, se a etapa anterior for then etapa será substituída por then caso contrário, por given .

Portanto, no caso de then_contain ser o mesmo, a verificação é feita em uma nova expressão falada e não na anterior.
Isso também porque o barramento de mensagem mycroft não salva as respostas fornecidas, portanto, quando uma resposta é consumida, não é possível ter acesso a ela.

Consulte a solicitação de pull nº 2711 e o problema nº 2714

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

el-tocino picture el-tocino  ·  4Comentários

beemorris picture beemorris  ·  6Comentários

Zacki84 picture Zacki84  ·  10Comentários

mghoffmann picture mghoffmann  ·  6Comentários

Ahmed-Benj picture Ahmed-Benj  ·  7Comentários