#質問
以下のような関連付けされているファクトリで、例えば FactoryBot.create(:micropost) を呼び出した際に、常に特定のユーザーが関連付けされているようなファクトリを作る方法は無いでしょうか?
いい感じにファクトリファイル内のトレイトなどを設定すればできる気がしますが、自分の力では解決できません…
力を貸していただけると嬉しいです
ruby
1# 例 2# specify_user というトレイトを作って同じユーザーと関連付け 3FactoryBot.create(:micropost, :specify_user) 4FactoryBot.create(:micropost, :specify_user) 5FactoryBot.create(:micropost, :specify_user)
spec/factories/users.rb
ruby
1FactoryBot.define do 2 factory :user do 3 sequence(:name) { |n| "Text User#{n}" } 4 sequence(:email) { |n| "test_user#{n}@example.com" } 5 password { "password" } 6 end 7end 8
spec/factories/microposts.rb
ruby
1FactoryBot.define do 2 factory :micropost do 3 content { "Lorem ipsum" } 4 association :user 5 end 6end 7
#きっかけ
以下のようなテストを書いていて、userのファクトリを生成しなくてもうまくテストをかけそうだと思った。
(ユーザーはフォローしているユーザーと自分のマイクロポストのみをフィードに持つという内容のテストです)
spec/models/user_spec.rb
ruby
1it "feed have right posts" do 2 user1 = FactoryBot.create(:user) 3 user2 = FactoryBot.create(:user) 4 user3 = FactoryBot.create(:user) 5 6 3.times do |n| 7 FactoryBot.create(:micropost, user: user1) 8 FactoryBot.create(:micropost, user: user2) 9 FactoryBot.create(:micropost, user: user3) 10 end 11 12 user1.follow(user2) 13 # Posts from followed user 14 user2.microposts.each do |post_following| 15 expect(user1.feed).to include(post_following) 16 end 17 # Self-posts for user with followers 18 user1.microposts.each do |post_self| 19 expect(user1.feed).to include(post_self) 20 end 21 # Posts from unfollowed user 22 user3.microposts.each do |post_unfollowed| 23 expect(user1.feed).to_not include(post_unfollowed) 24 end 25 end
あなたの回答
tips
プレビュー