17

Cucumber では、私のenv.rbファイルに before & after フックが設定されています (いくつかは特定のタグにリンクされています) puts

たとえば、これは機能します:

Before do
  puts "before the scenario"
end

しかし、これはしません:

After do
  puts "after the scenario"
end

アフターフックが実行されるようです(アフターフックとそれをデバッグしようとしている特定の行があるため、この問題が見つかりました)が、何も出力していません。

私の検索はすべて実を結ばず、同様の問題を抱えている人を見つけることができません。私が何か間違っているかどうか誰にもわかりますか?

4

2 に答える 2

24

Cucumberはクラスputs内のメッセージをオーバーライドして、で書かれたものがすべてのフォーマッターに適切にブロードキャストされるようにします。フォーマッターの場合、これらはコレクションに入れられ、呼び出されるまで、各ステップ名が出力された後に実行されるように見えます。おそらく、メッセージが生成されたステップの下にネストされているように見えます。RbWorldputsprettydelayed_messagesprint_messages

何らかの理由print_messagesで、かわいいフォーマッターに最終的な呼び出しはありません。出力に偽のメッセージが含まれていると「きれい」に見えなくなるため、それが省略であるか意図的なものであるかはわかりません。

興味深いことに、2番目のシナリオを追加すると、2番目のシナリオが実行されたときに最初のメッセージとして「シナリオの後」が出力されます。これがdelayed_messagesコレクションの動作です。

要約すると、あなたは何も悪いことをしていません、それはキュウリがメソッドをハイジャックするputs方法です。これらのメッセージが適切にフォーマットされていることにあまり関心がない場合は、Cucumberのフォーマットをバイパスするputsために置き換えることができます。STDOUT.puts

于 2012-05-10T10:50:24.180 に答える
6
 Before do
     p "Go!"
     puts "Go!"
 end

 After do
     p "Stop!"
     puts "Stop!"
     $stdout.puts "Stop!"
 end

このスニペットの出力は、After フックで「プット」が機能しない理由を理解するのに役立つ場合があります。

于 2012-05-10T05:40:08.293 に答える