Я пытаюсь написать тест на свои навыки.
Я использую фреймворк Behave.
В документации mycroft, когда объясняется, как написать тест с помощью Behave, показана возможность проверить, содержит ли ответ mycroft определенное слово или нет.
Но все представленные способы у меня не работают.
Я пытался:
Где ошибка?
Я должен использовать ключевое слово «содержать» или «включать»?
Привет, похоже, синтаксис для содержания слова должен быть
Then mycroft reply should contain "SOMETHING CLEVER"
Где ЧТО-ТО УМНЫЙ - ожидаемый умный ответ от Майкрофта :)
См. Здесь определение, а пример можно найти в вики-навыке.
Я не видел шага «не включать», я вижу, что на него есть ссылки в документации, но я думаю, что это в основном пример ...
Думаю, проблема самая простая.
Если вы заметили определение «должен содержать», не используйте атрибут {skill}, как на другом шаге, поэтому, чтобы использовать этот шаг, мы должны написать «Then mycroft ...», а не «Then {skillname} ...»
Сравните два этого определения ...
@then ('ответ Майкрофта должен содержать "{текст}"')
и не как другой шаг
@then ('"{skill}" должен ответить точно "{text}"')
Эй, я изменил этот пример в документации. Это была моя ошибка.
Более широкие шаги «ответ Майкрофта» полезны, когда вам на самом деле все равно, какой навык отвечает, до тех пор, пока вы получаете хороший ответ. Например, задать общий вопрос о высоте Эйфелевой башни - это может быть DuckDuckGo, Wikipedia или Wolfram Alpha, но в любом случае это все равно успешное взаимодействие.
Тем не менее, спасибо за то, что подняли проблему, я думаю, что все это хорошие кандидаты для добавления в качестве новых шагов:
ОК. Огромное спасибо. Теперь понятно, как использовать шаг then_contains.
У меня тоже проблема с этим примером:
`Особенность: текущая погода
Сценарий: температура в париже
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"`
Когда я использую But или And, кажется, что проверка слова, которое должен содержать ответ, не выполняется в предыдущем ответе, но кажется, что это работает как обычно
Then mycroft reply should contain...
, поэтому кажется, что также usign But | And ,beeve обслуживает новый ответ, чтобы проверить, содержит ли ответ определенное слово.
Также в определении шага поведения нет ссылки на шаг включения, который работает с предыдущим ответом с ключевым словом And или But.
Редактировать:
Такое поведение является нормальным поведением программы behavior.
But
и And
не работают с предыдущим ответом, но они полезны, чтобы сделать тест более читабельным.
Если вы напишете
"Then "myskil" should reply with dialog "myskill.dialog"
"And|But "myskill" should reply with dialog "myskillother.dialog"
То же самое
"Then "myskil" should reply with dialog "myskill.dialog"
"Then "myskill" should reply with dialog "myskillother.dialog"
Таким образом, and|but
заменяется на then|given
зависимости от типа предыдущего шага, если предыдущий шаг представляет собой then
шаг будет заменен на then
противном случае на given
.
Таким образом, если then_contain совпадает, проверка выполняется на новом речевом высказывании, а не на предыдущем.
Это также связано с тем, что шина сообщений mycroft не сохраняет предоставленные ответы, поэтому, когда ответ завершен, невозможно получить к нему доступ.
См. Запрос на вытягивание № 2711 и выпуск № 2714.
Самый полезный комментарий
Эй, я изменил этот пример в документации. Это была моя ошибка.
Более широкие шаги «ответ Майкрофта» полезны, когда вам на самом деле все равно, какой навык отвечает, до тех пор, пока вы получаете хороший ответ. Например, задать общий вопрос о высоте Эйфелевой башни - это может быть DuckDuckGo, Wikipedia или Wolfram Alpha, но в любом случае это все равно успешное взаимодействие.
Тем не менее, спасибо за то, что подняли проблему, я думаю, что все это хорошие кандидаты для добавления в качестве новых шагов: