我正在尝试为我的技能编写测试。
我正在使用行为框架。
在 mycroft 文档中解释了如何使用 Behave 编写测试时显示了检查 mycroft 回复是否包含特定单词的可能性。
但是所有介绍的方式都不适用于我。
我试过了:
错误在哪里?
我必须使用关键字“包含”还是“包含”?
我认为问题最简单。
如果您注意到“应该包含”的定义,请不要像其他步骤一样使用属性 {skill},因此要使用此步骤,我们必须编写“Then mycroft...”而不是“Then {skillname}...”
比较两个这个定义...
@then('mycroft 回复应包含“{text}”')
而不像其他步骤
@then('"{skill}" 应该准确回复 "{text}"')
嘿,我已经在文档中更改了该示例。 那是我的错误。
当您实际上并不关心哪个技能响应时,更广泛的“mycroft 回复”步骤很有用,只要您得到一个好的答案。 例如,询问诸如埃菲尔铁塔高度之类的常识性问题——答案可能是 DuckDuckGo、维基百科或 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...
,所以似乎也使用了 But|And, 行为出席新回复以检查回复是否包含特定单词。
同样在行为步骤的定义中,没有关于使用 And 或 But 关键字处理先前回复的包含步骤的参考。
编辑:
这种行为是behave的正常行为。
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
最有用的评论
嘿,我已经在文档中更改了该示例。 那是我的错误。
当您实际上并不关心哪个技能响应时,更广泛的“mycroft 回复”步骤很有用,只要您得到一个好的答案。 例如,询问诸如埃菲尔铁塔高度之类的常识性问题——答案可能是 DuckDuckGo、维基百科或 Wolfram Alpha,但无论哪种方式,它仍然是一次成功的交互。
感谢您提出这个问题,我认为这些都是作为新步骤添加的好候选: