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:
Onde está o erro?
Tenho que usar a palavra-chave "conter" ou "incluir"?
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:
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
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: