2

Railsアプリケーションで、JSONデータに基づいてモデル階層を作成するメソッドを作成しました。このメソッドがデータベースに何も保存しないことを保証したいと思います。私は次のようなテストを書くことができることを知っています:

expect {
  Importer.import(json)
}.not_to change(Model1, :count)
expect {
  Importer.import(json)
}.not_to change(Model2, :count)
# etc.

しかし、もっと一般的な方法でやりたいと思います。テスト中にモデルが保存されたかどうかを確認する方法はRSpecにありますか?

4

3 に答える 3

1

少し冗長ですが、あなたのやり方はそれほど悪くはありません。haveマッチャーを使用できます。

Importer.import(json)
collection1 = Model.all
collection1.should have(5).items

...

collection2.should_not have(5).items

# etc....

ただし、あなたのコンテキストでは、元のテストのように読む方が理にかなっています (本当に意味のあるカスタムマッチャーを作成する以外に)。「インポーター」が何をするか、何をしないかをテストします。

have(n).items マッチャー

于 2013-02-08T15:16:22.543 に答える
-1

Rspecがこれに役立つかどうかはわかりませんが、データベースに手動ですばやくアクセスすることでうまくいく可能性がありますか?

[Model1, Model2].each do |model|
  model.where('updated_at > ?', Time.now - 2.seconds).count.should eq 0
end
于 2013-02-08T10:10:47.983 に答える