質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

1038閲覧

【RSpec】【FactoryBot】ファクトリを常に同じ関連付けにしたい

eici

総合スコア3

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/12/17 10:51

編集2020/12/17 10:52

#質問
以下のような関連付けされているファクトリで、例えば 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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問