LoginSignup
0
0

RSpecでモデルオブジェクトが作成されない

Posted at

はじめに

RSpecを回した時だけモデルオブジェクトが作成されない問題が発生し、
ただただ凡ミスですがなかなか気づかず時間を溶かしてしまったため自戒の念を込めて・・・

概要

  • 論理削除のため"discard"を使用
  • RSpecでダミーデータを作成するため、FactoryBotを使用
  • let(:user) {FactoryBot.create(:user)}のようにテストデータを定義

発生した問題

デバッグしuserを確認するとオブジェクトは作られているのに、
User.firstなどで参照した際に空となっているため期待値を得られない。

原因

結論、FactoryBotのdiscarded_atに初期値を入れてしまっていたことが原因と思われます。

# spec/factories/users.rb

FactoryBot.define do
  factory :user do
    nickname              {"test"}
    email                 {"test@gmail.com"}
    password              {"12345678"}
    password_confirmation {"12345678"}
    discarded_at {"2023-07-01 03:12:01"} # 問題の箇所
  end
end

修正後

# spec/factories/users.rb

FactoryBot.define do
  factory :user do
    nickname              {"test"}
    email                 {"test@gmail.com"}
    password              {"12345678"}
    password_confirmation {"12345678"}
    discarded_at {nil} # nilに修正
  end
end

これでモデルオブジェクトが正常に保存され参照できるようになったの、
テストが期待通り通るようになりました。

最後に

letで定義する際にdiscarded_atをnilにしても解決すると思いますが、
そもそもdiscarded_atに初期値を持たせること自体普通ではないので、
nilにするのが正解だと思います。

めちゃくちゃ凡ミスだった。反省。

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