次のメソッドを持つばかげた "queue-class[1]" があり、Rspec で仕様を特定したいと考えています。ファイルシステムへの書き込みが機能するかどうかのテストには関心がありませんが (機能し、私のコンピューターは機能します)、正しいデータが書き出されるかどうかには関心があります。
def write transaction
File.open("messages/#{@next_id}", "w") {|f| f.puts transaction }
@next_id += 1
end
これをテストするための仕様は次のとおりです。
describe TransactionQueue do
context "#write" do
it "should write positive values" do
open_file = mock File
open_file.stub(:puts)
File.any_instance.stub(:open).and_yield(open_file)
File.any_instance.should_receive(:open)
open_file.should_receive(:puts).with("+100")
@queue = TransactionQueue.new
@queue.write("+100")
end
end
end
これを実行すると失敗します。これは、モックが予想される「open」および「puts」メッセージを受信しないためです。
私はFile
このように嘲笑することができますか?any_instance
正しく使用しましたか?「ブロック利回り」をスタブしようとする私の試みは正しいですか?
回避できる場合は、FakeFS のような追加の gem を使用したくありません。これは、それを機能させることではありません。bu 主に何が起こっているのかを実際に理解することについてです。したがって、余分な宝石/複雑なレイヤーを避けるための私の試み.
[1] クラスはThe Cucumber Bookからのものです。しかし、これらのテストは Cucumber 自体とはほとんど関係がありません。本に従っているときに、どういうわけかコードを壊しました。そして、この本でテストが書かれていない部分、つまりヘルパー クラスの単体テストを書くことによって、何を調べたいと思っています。