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

web*_*irl 17 ruby cucumber

在Cucumber中,在我的env.rb文件中,我有一个前后钩子设置(好吧,其中一些,一些链接到特定的标签),但发现后挂钩在我放入puts它们时不输出任何东西.

例如,这有效:

Before do
  puts "before the scenario"
end
Run Code Online (Sandbox Code Playgroud)

但这不是:

After do
  puts "after the scenario"
end
Run Code Online (Sandbox Code Playgroud)

似乎后挂钩确实运行(因为有一个特定的线我在后挂钩问题和试图调试它,我发现了这个问题),但他们只是没有输出任何东西.

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

Jon*_*n M 24

Cucumber会覆盖类中的puts消息,RbWorld以便任何编写的内容puts都可以正确地广播给所有格式化程序.在pretty格式化程序的情况下,这些将进入一个delayed_messages集合,直到它调用print_messages,它在打印每个步骤名称后似乎执行,大概是为了使消息看起来嵌套在它们生成的步骤下.

由于某些原因,print_messages在漂亮的格式化程序中没有最后的调用,我不确定它是否是遗漏或故意,因为在输出中看起来不那么"漂亮".

有趣的是,如果添加第二个场景,当第二个场景运行时,您将看到"在场景之后"打印为第一条消息,这就是delayed_messages集合的实际效果.

总而言之,你没有做错任何事,这就是Cucumber劫持这种puts方法的方式.如果你不是太费心自己被很好地格式化这些消息,那么只需更换putsSTDOUT.puts绕过黄瓜的格式.


suv*_*kar 6

 Before do
     p "Go!"
     puts "Go!"
 end

 After do
     p "Stop!"
     puts "Stop!"
     $stdout.puts "Stop!"
 end
Run Code Online (Sandbox Code Playgroud)

此片段的输出可能有助于理解为什么'puts'在After hook中不起作用.