10

ruby プロジェクトのテストに rspec を使用していますが、-q オプションを使用した場合にプログラムが何も出力しないように仕様を設定したいと考えています。私は試した:

Kernel.should_not_receive :puts

コンソールに出力があった場合、テストが失敗することはありませんでした。

テキスト出力がないことを確認するにはどうすればよいですか?

4

2 に答える 2

15

puts は内部で $stdout を使用します。動作方法により、確認する最も簡単な方法は、次を使用することです。$stdout.should_not_receive(:write)

期待どおりに stdout に何も書き込まれていないことを確認します。Kernel.puts (上記のように) は、そのように明示的に呼び出された場合 (例: Kernel.puts "Some text")、ほとんどの場合、現在のオブジェクトのスコープで呼び出された場合にのみ、テストが失敗します。

于 2009-10-10T12:10:24.893 に答える
4

上記の受け入れられた答えは正しくありません。:write メッセージを受信しないが、:puts メッセージを受信した可能性があるため、「動作」します。

正しい行は次のようになります。

$stdout.should_not_receive(:puts)

また、STDIO に書き込むコードのに行を配置する必要があります。例えば:

it "should print a copyright message" do
  $stdout.should_receive(:puts).with(/copyright/i)
  app = ApplicationController.new(%w[project_name])
end


it "should not print an error message" do
  $stdout.should_not_receive(:puts).with(/error/i)
  app = ApplicationController.new(%w[project_name])
end

それはプロジェクトからの実際の作業RSpecです

于 2010-11-01T06:27:14.800 に答える