##環境
Ruby 3.0.2
Rails 6.1.4.1
##状況
enum genre: { mistery: 0, romance: 1 }
factory.rb
FactoryBot.define do
factory :post do
user
title { 'first' }
genre { 0 }
end
end
rspec.rb
context '記事を追加する際、正しい値の場合' do
let!(:post) { create(:post) }
let!(:post_params) { attributes_for(:post, title: 'other') }
it '記事を追加できること' do
expect {
post "/manage/posts/#{post.id}", params: { post: post_params }
}.to change(Post, :count)
expect(response).to have_http_status(302)
expect(post.reload.title).to eq 'other'
end
end
ArgumentError:
'0' is not a valid role
employee_paramsにgenreの値は0が渡っていたため、パラメーターが正しくなくDBに追加されずにテストが落ちていた。
> employee_params
=> {:title=>"first",
:genre=>0}
##解決法
enumを設定しているときのFactoryBotの値は文字列でデータ作成する。
factory.rb
FactoryBot.define do
factory :post do
user
title { 'first' }
genre { 'mistery' }
end
end