Rspecでテストコード記入中に発生したエラーです。
spec/models/quiz_spec.rbに以下の様にテストを書いていました。
require 'rails_helper'
RSpec.describe Quiz, type: :model do
include ActionDispatch::TestProcess::FixtureFile
let(:quiz) { create(:quiz) }
~
describe '投稿画像の拡張子の検証' do
it '正しい拡張子の画像ファイルが問題画像として有効であること' do
~
it '不正な拡張子の画像ファイルが正解画像として無効であること' do
quiz.answer_image = fixture_file_upload('/e5cb899367efb53d53e5047185f273d8.gif')
expect(quiz.errors[:answer_image]).to include('の拡張子が間違っています')
end
end
end
これでRspecを走らせると以下の様なエラーが発生しました。
Failures:
1) Quiz 投稿画像の拡張子の検証 不正な拡張子の画像ファイルが正解画像として無効であること
Failure/Error: expect(quiz.errors[:answer_image]).to include('の拡張子が間違っています')
expected #<ActiveModel::DeprecationHandlingMessageArray([])> to include "の拡張子が間違っています"
~
エラー文を読んでもよくわかりませんでしたが、対象テストを以下の様に書き換えると通りました。
it '不正な拡張子の画像ファイルが正解画像として無効であること' do
quiz.answer_image = fixture_file_upload('/e5cb899367efb53d53e5047185f273d8.gif')
quiz.valid?
expect(quiz.errors[:answer_image]).to include('の拡張子が間違っています')
end
quiz.valid?
を追加しています。一度バリデーションをかけないとerrorsに何も値が代入されません。
今回のエラーはバリデーションにかけていなかったためにerrorsに何も値が代入されていなかったために発生していた様です。