Rails4 rspecのテストでスタブで例外を投げる
テストでスタブでsave!で例外を投げるようにしたかった。
Recordクラスの下記のようなsave_recordという関数があったとする。
def save_record(user) begin self.transaction do record= self.new record.user_id = user.id record.user_name = user.name record.save! end return true rescue return false end end
この場合、保存が失敗したときにfalseがちゃんと帰ってくるかテストするためには、save!が例外を投げるしかない。
そこで、スタブを使って例外を投げることにした。
beforeで@user1にデータが設定されているものとする。
it "保存に失敗した場合、falseを返す" do # save!で例外を投げるように細工 Record.any_instance.stub(:save!).and_raise(ActiveRecord::RecordInvalid) expect(Record.save_record(@user1)).to be_false end
Recordクラスのsave_record内で呼ばれるsave!が例外を投げるので、保存に失敗し、falseが返ってきた。
参考:
ruby - How to stub error raising using Rspec in Rails? - Stack Overflow
Rails4 rspecによるスタブ、モックを使ったテスト - ayaketanのプログラミング勉強日記