Mycroft-core: Проблема проверки поведения: "Тогда ответ должен содержать | включать" не работает

Созданный на 30 сент. 2020  ·  5Комментарии  ·  Источник: MycroftAI/mycroft-core

Я пытаюсь написать тест на свои навыки.
Я использую фреймворк Behave.
В документации mycroft, когда объясняется, как написать тест с помощью Behave, показана возможность проверить, содержит ли ответ mycroft определенное слово или нет.
Но все представленные способы у меня не работают.

Я пытался:

  • Тогда ответ «mycroft-skill» должен содержать [слово]
  • Затем "mycroft-skill" должен ответить диалогом [файл диалога] Но ответ должен включать [слово]
  • Затем «mycroft-skill» должен ответить диалогом [файл диалога] Затем ответ «mycroft-skill» должен включать [слово]
  • Затем "mycroft-skill" должен ответить диалогом [файл диалога] Но ответ "mycroft-skill" должен включать [слово]
  • Тогда "mycroft-skill" должен ответить диалогом [файл диалога] Но ответ должен содержать [слово]
  • Затем «mycroft-skill» должен ответить диалогом [файл диалога] Тогда ответ «mycroft-skill» должен содержать [слово]
  • Затем "mycroft-skill" должен ответить диалогом [файл диалога] Но ответ "mycroft-skill" должен содержать [слово]

Где ошибка?
Я должен использовать ключевое слово «содержать» или «включать»?

For discussion Enhancement - proposed help wanted

Самый полезный комментарий

Эй, я изменил этот пример в документации. Это была моя ошибка.

Более широкие шаги «ответ Майкрофта» полезны, когда вам на самом деле все равно, какой навык отвечает, до тех пор, пока вы получаете хороший ответ. Например, задать общий вопрос о высоте Эйфелевой башни - это может быть DuckDuckGo, Wikipedia или Wolfram Alpha, но в любом случае это все равно успешное взаимодействие.

Тем не менее, спасибо за то, что подняли проблему, я думаю, что все это хорошие кандидаты для добавления в качестве новых шагов:

  • тогда ответ {skill} должен содержать "{text}"
  • тогда ответ {skill} не должен содержать "{text}"
  • тогда ответ Майкрофта не должен содержать "{текст}"

Все 5 Комментарий

Привет, похоже, синтаксис для содержания слова должен быть

Then mycroft reply should contain "SOMETHING CLEVER"

Где ЧТО-ТО УМНЫЙ - ожидаемый умный ответ от Майкрофта :)

См. Здесь определение, а пример можно найти в вики-навыке.

Я не видел шага «не включать», я вижу, что на него есть ссылки в документации, но я думаю, что это в основном пример ...

Думаю, проблема самая простая.
Если вы заметили определение «должен содержать», не используйте атрибут {skill}, как на другом шаге, поэтому, чтобы использовать этот шаг, мы должны написать «Then mycroft ...», а не «Then {skillname} ...»

Сравните два этого определения ...
@then ('ответ Майкрофта должен содержать "{текст}"')
и не как другой шаг
@then ('"{skill}" должен ответить точно "{text}"')

Эй, я изменил этот пример в документации. Это была моя ошибка.

Более широкие шаги «ответ Майкрофта» полезны, когда вам на самом деле все равно, какой навык отвечает, до тех пор, пока вы получаете хороший ответ. Например, задать общий вопрос о высоте Эйфелевой башни - это может быть DuckDuckGo, Wikipedia или Wolfram Alpha, но в любом случае это все равно успешное взаимодействие.

Тем не менее, спасибо за то, что подняли проблему, я думаю, что все это хорошие кандидаты для добавления в качестве новых шагов:

  • тогда ответ {skill} должен содержать "{text}"
  • тогда ответ {skill} не должен содержать "{text}"
  • тогда ответ Майкрофта не должен содержать "{текст}"

ОК. Огромное спасибо. Теперь понятно, как использовать шаг 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.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги