FactoryGirl で association を持つオブジェクトの生成
例として、User
, Category
に次のように association を持たせているとします。
# app/models/user.rb class User < ActiveRecord::Base has_many :categories # ... end # app/models/category.rb class Category < ActiveRecord::Base belongs_to :user # ... end
ファクトリは次のように書きます。
# spec/factories/user.rb FactoryGirl.define do factory :user do name 'Foo' email 'foo@example.com' password 'password' password_confirmation 'password' end end # spec/factories/categories.rb FactoryGirl.define do factory :category do association :user name 'Bar' end end
すると、次のように、スペック内で association で関連付けられたモデルを参照するオブジェクトを生成できます。
user = FactoryGirl.create(:user) # user を参照する category を作成 let(:category) { FactoryGirl.create(:category, user_id: user.id) }
session controller のスペックで session を参照
ログイン処理を実装している(session[:user_id]
へユーザ ID を保存しているとか) SessionsController#create
へ、次のようにルーティングしているとします。
# config/routes.rb post 'login' => 'sessions#create'
この session
*1 は普通に参照できます。
describe 'POST #create' do let(:user) { create(:user) } let(:valid_parameters) do { email: user.email, password: user.password } end it 'saves the user ID to the session object' do post :create, session: valid_parameters # session[:user_id] で controller 内で設定している値を取り出し expect(session[:user_id]).to eq user.id end end