0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Ruby On Rails】FactoryBotを用いてRSpecでモデル単体テストを行うと外部キーが入力されていないことでエラーになる

Posted at

初投稿
備忘録です。
#エラー背景
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

成功です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?