在Cucumber中,在我的env.rb
文件中,我有一个&在钩子设置之后(好吧,其中一些,一些链接到特定的标签),但是当我在其中放入puts
时发现后挂钩不输出任何内容。
例如,这有效:
Before do
puts "before the scenario"
end
但这不是:
After do
puts "after the scenario"
end
似乎后挂钩确实运行了(因为有一条特定的线我在后挂钩中遇到问题&在尝试调试时,我发现了这个问题)但它们只是没有输出任何东西。
我所有的搜索都没有结果,找不到其他有类似问题的人。谁能说出我做错了什么?
答案 0 :(得分:23)
Cucumber覆盖puts
类中的RbWorld
消息,以便用puts
编写的任何内容都可以正确地广播给所有格式化程序。对于pretty
格式化程序,它们会进入delayed_messages
集合,直到它调用print_messages
,它似乎在每个步骤名称打印后执行,大概是为了显示消息嵌套在生成它们的步骤之下。
由于某些原因,在漂亮的格式化程序中没有最后调用print_messages
,我不确定它是否是遗漏或故意,因为在输出中显示虚假消息看起来不那么“漂亮”。 / p>
有趣的是,如果你添加第二个场景,你会看到“在场景之后”打印为第二个场景运行时的第一条消息,那就是delayed_messages
集合在运行。
总之,你没有做错任何事,这就是Cucumber劫持puts
方法的方式。如果您对这些消息的格式设置不太感兴趣,那么您只需将puts
替换为STDOUT.puts
即可绕过Cucumber的格式。
答案 1 :(得分:5)
Before do
p "Go!"
puts "Go!"
end
After do
p "Stop!"
puts "Stop!"
$stdout.puts "Stop!"
end
此片段的输出可能有助于理解为什么'puts'在After hook中不起作用。