初投稿
備忘録です。
#エラー背景
RSpecでテストを実行する際に、FactoryBot内に記述すべき外部キーについて未入力であった。
FactoryBot.define do
factory :order_form do
zipcode {'123-4567'}
prefecture_id {1}
city {'亜嗚呼市あああ区'}
address {'亜嗚呼1-1-1'}
phone_number {'09012345678'}
end
end
#エラー内容
OrderForm
商品購入
商品購入がうまくいく時
全項目が存在すれば購入できる (FAILED - 1)
Failures:
1) OrderForm 商品購入 商品購入がうまくいく時 全項目が存在すれば購入できる
Failure/Error: expect(@order_form).to be_valid
expected #<OrderForm:0x00007fe44961c1e8 @zipcode="123-4567", @prefecture_id=1, @city="亜嗚呼市あああ区", @address="亜嗚呼1-1-1", @phone_number="09012345678", @validation_context=nil, @errors=#<ActiveModel::Errors:0x00007fe448aeeaa0 @base=#<OrderForm:0x00007fe44961c1e8 ...>, @messages={:user_id=>["can't be blank"], :item_id=>["can't be blank"]}, @details={:user_id=>[{:error=>:blank}], :item_id=>[{:error=>:blank}]}>> to be valid, but got errors: User can't be blank, Item can't be blank
# ./spec/models/order_form_spec.rb:10:in `block (4 levels) in <top (required)>'
Finished in 0.17606 seconds (files took 1.9 seconds to load)
1 example, 1 failure
Failed examples:
rspec ./spec/models/order_form_spec.rb:9 # OrderForm 商品購入 商品購入がうまくいく時 全項目が存在すれば購入できる
注目すべき点はこちらです。
@errors=#<ActiveModel::Errors:0x00007fe448aeeaa0 @base=#<OrderForm:0x00007fe44961c1e8 ...>, @messages={:user_id=>["can't be blank"], :item_id=>["can't be blank"]}, @details={:user_id=>[{:error=>:blank}], :item_id=>[{:error=>:blank}]}>> to be valid, but got errors: User can't be blank, Item can't be blank
外部キーとしていたuser_id、item_idが空欄になっているということを教えてくれました。
#エラー修正
エラー内容より、FactoryBot内の記述を修正すれば良いことがわかりました。
あとは指示された通りuser_idとitem_idをFactoryBotに追加してあげれば大丈夫です。
user_id { FactoryBot.create(:user).id }
item_id { FactoryBot.create(:item).id }
#修正後のターミナル
OrderForm
商品購入
商品購入がうまくいく時
全項目が存在すれば購入できる
Finished in 0.3807 seconds (files took 3.22 seconds to load)
1 example, 0 failures
成功です。