環境
ruby 2.7.1
Rails 6.1.3.2
RSpec 3.10
状況
Rspec実行時に下記のエラーで怒られた
NoMethodError:
undefined method `article=' for #<XXXXX:0x000055d551353cd0>
Did you mean? article=
article
article_id=
spec/factories/users.rb
FactoryBot.define do
factory :user do
name { "testuser1" }
sequence(:email) { |n| "tester#{n}@example.com" }
password { "testpassword" }
end
end
spec/factories/articles.rb
FactoryBot.define do
factory :article do
user
title { "sampletitle" }
content { "samplecontent" }
end
end
spec/factories/comments.rb
FactoryBot.define do
factory :comment do
user
article
content { "samplecomment" }
end
end
原因
FactoryBotのアソシエーションで作成するデータがかぶっていた
(articleとcomment両方にアソシエーションとしてuserが定義されている)
解決方法
アソシエーションがかぶっているcommentのuserのアソシエーションの書き方を変える
spec/factories/comments.rb
FactoryBot.define do
factory :comment do
user { article.user } #articleで作成されたuserを使う
article
content { "samplecomment" }
end
end
参考