エラーが発生するメソッドの副作用をテストする方法
概要
次のような方法があります。
def method
# ..
begin
some_invokation
rescue StandardError
# some_other_stuff
raise
end
# ..
User.create!
end
現時点では、このメソッドが例外を発生させることをテストできます。
expect { method }.to raise_error(StandardError)
ただし、ユーザーが作成されていないこともテストしたいと思います。
expect { method }.not_to change { User.count }
それは機能しません。例外が発生したことを示しています。私は呼び出しをモックレイズしようとしました:
allow_any_instance_of(described_class).to receive(:raise)
ただし、この場合、私のメソッドは中断されず、ユーザーが作成されます。他に方法はありますか?
解決策
おそらく次のようなものでしょう:
expect {
method rescue nil
}.not_to change { User.count }