SomeClass.any_instance.stub(:some_method).ordered => NG

RSpec MockのSomeClass.any_instance.stub(:some_method)したものには、orderedメソッドがないのですね。知らなかった。
あるモデルをsave!したあとに処理していることをチェックしたかったので、

SomeModel.any_instance.stub(:save!).ordered
=> 例外発生

で気が付きました。
仕方がないので、処理を呼び出した時のデータベース値をチェックして、データベースの更新後かどうかをチェックすることにしました。

it "..." do
  OtherModel.should_receive(:other_method).once do |some_record|
    some_record.reload
    expect(some_record.field).to eq(expected)
  end
  (ここでOtherModel.other_methodを呼び出すなんらかの処理)
end

まぁ、本来、確認したかったことをspecに実装しているのでヨシッ!とします。
RSpecは奥が深いですね〜。

--- PR広告
記事を読んでくださり、ありがとうございます。
もしよろしければ、この記事の著者が提供している無料のサービス「かくってる?」をお試しください。