Mycroft-core: 行为测试问题:“然后回复应该包含|包含”不起作用

创建于 2020-09-30  ·  5评论  ·  资料来源: MycroftAI/mycroft-core

我正在尝试为我的技能编写测试。
我正在使用行为框架。
在 mycroft 文档中解释了如何使用 Behave 编写测试时显示了检查 mycroft 回复是否包含特定单词的可能性。
但是所有介绍的方式都不适用于我。

我试过了:

  • 然后“mycroft-skill”回复应该包含 [word]
  • 然后“mycroft-skill”应该用对话框[对话框文件]回复但回复应该包括[单词]
  • 然后“mycroft-skill”应该用对话框回复[对话框文件] 然后“mycroft-skill”回复应该包括[word]
  • 然后“mycroft-skill”应该回复对话框[对话框文件]但是“mycroft-skill”回复应该包括[word]
  • 然后“mycroft-skill”应该用对话框[对话框文件]回复但回复应该包含[单词]
  • 然后“mycroft-skill”应该用对话框回复[对话框文件] 然后“mycroft-skill”回复应该包含[word]
  • 然后“mycroft-skill”应该用对话框回复[对话框文件]但是“mycroft-skill”回复应该包含[word]

错误在哪里?
我必须使用关键字“包含”还是“包含”?

For discussion Enhancement - proposed help wanted

最有用的评论

嘿,我已经在文档中更改了该示例。 那是我的错误。

当您实际上并不关心哪个技能响应​​时,更广泛的“mycroft 回复”步骤很有用,只要您得到一个好的答案。 例如,询问诸如埃菲尔铁塔高度之类的常识性问题——答案可能是 DuckDuckGo、维基百科或 Wolfram Alpha,但无论哪种方式,它仍然是一次成功的交互。

感谢您提出这个问题,我认为这些都是作为新步骤添加的好候选:

  • 那么 {skill} 回复应该包含“{text}”
  • 那么 {skill} 回复不应包含“{text}”
  • 那么 mycroft 回复不应包含“{text}”

所有5条评论

嗨,似乎包含单词的语法应该是

Then mycroft reply should contain "SOMETHING CLEVER"

来自 mycroft 的预期聪明反应是什么?

有关定义,请参见此处,并且可以在 wiki 技能中找到示例

我还没有看到“不应该包括”的步骤,我在文档中看到了它的引用,但我认为这主要是一个例子......

我认为问题最简单。
如果您注意到“应该包含”的定义,请不要像其他步骤一样使用属性 {skill},因此要使用此步骤,我们必须编写“Then mycroft...”而不是“Then {skillname}...”

比较两个这个定义...
@then('mycroft 回复应包含“{text}”')
而不像其他步骤
@then('"{skill}" 应该准确回复 "{text}"')

嘿,我已经在文档中更改了该示例。 那是我的错误。

当您实际上并不关心哪个技能响应​​时,更广泛的“mycroft 回复”步骤很有用,只要您得到一个好的答案。 例如,询问诸如埃菲尔铁塔高度之类的常识性问题——答案可能是 DuckDuckGo、维基百科或 Wolfram Alpha,但无论哪种方式,它仍然是一次成功的交互。

感谢您提出这个问题,我认为这些都是作为新步骤添加的好候选:

  • 那么 {skill} 回复应该包含“{text}”
  • 那么 {skill} 回复不应包含“{text}”
  • 那么 mycroft 回复不应包含“{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... ,所以似乎也使用了 But|And, 行为出席新回复以检查回复是否包含特定单词。
同样在行为步骤的定义中,没有关于使用 And 或 But 关键字处理先前回复的包含步骤的参考。

编辑:

这种行为是behave的正常行为。
ButAnd不适用于之前的回复,但它们有助于提高测试的可读性。
如果你写

"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 等级