以下のようにActiveRecord::RecordInvalidのテストをしようと思いました。
let(:person) { mock_model(Person).as_null_object }
it{
Person.should_receive(:find).and_return(person)
person.should_receive(:update_attributes!).and_raise(ActiveRecord::RecordInvalid)
…
}
が、
ArgumentError:
wrong number of arguments (0 for 1)
と怒られます。なかなか情報がなかったのですが、RecordInvalidクラスがコンストラクタでnewをするときにActiveRecordを引数としてとるらしく、それがないので怒られたようです。下記のようにするとよいです。
person.should_receive(:update_attributes!).and_raise(ActiveRecord::RecordInvalid.new(person))
エラー表示はどのタイミングでエラーが起きたのかというのをもっと詳細に知らせてほしいものです。テストをするといろいろなことが知れて、そういったよい面もありますね。