LoginSignup
0

More than 1 year has passed since last update.

RspecでActiveRecord::RecordInvalid: バリデーションに失敗しました

Posted at

#環境

初めて記事を書かせて頂きます🙇‍♂️
間違っていたら指摘お願いします
M1
ruby3.1.0
rails 6~


#経緯

一度通ったテストが
RspecでActiveRecord::RecordInvalid:バリデーションに失敗しました
に阻まれて沼ったお話

テスト対象はuserなのに何故か違うテーブルのバリデーションがかかってしまう

#結論

アソシエーションをしていたから

今回作っていたテーブルの関係性を説明します

userテーブル, postテーブル, categoryテーブル

user 1対多 post
user 1対多 category

post 多対1 user
post 多対1 category

category 多対1 user
category 1対多 post

アソシエーションを組む事によって
postを作るにはuser, categoryが必要
categoryを作るのはuserが必要
という風になっていました

#Rspec

spec/requests/posts_spec.rb


let!(:category) { create(:category) }
let!(:new_post) { create(:post) }
let!(:user) { create(:user) }

途中からアソシエーションを組んだのでこのコードがエラーになってしまっていた

順番を変えることによってエラーから抜け出せます

spec/requests/posts_spec.rb

#アソシエーションの関係上
#user→category→postで生成しなければならない

let!(:user) { create(:user) }
let!(:category) { create(:category) }
let!(:new_post) { create(:post) }

#終わり

同じエラーにはまっている方がこれで抜け出せればという思いで書かせて頂きました🧟‍♂️

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