Cucumber“put”in After hook不输出任何东西

时间:2012-05-10 02:47:02

标签: ruby cucumber

在Cucumber中,在我的env.rb文件中,我有一个&在钩子设置之后(好吧,其中一些,一些链接到特定的标签),但是当我在其中放入puts时发现后挂钩不输出任何内容。

例如,这有效:

Before do
  puts "before the scenario"
end

但这不是:

After do
  puts "after the scenario"
end

似乎后挂钩确实运行了(因为有一条特定的线我在后挂钩中遇到问题&在尝试调试时,我发现了这个问题)但它们只是没有输出任何东西。

我所有的搜索都没有结果,找不到其他有类似问题的人。谁能说出我做错了什么?

2 个答案:

答案 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中不起作用。