RSpec 関連のメモ
FactoryGirl で association を持つオブジェクトの生成
例として、User
, Category
に次のように association を持たせているとします。
class User < ActiveRecord::Base has_many :categories # ...end
# app/models/category.rbclass Category < ActiveRecord::Base belongs_to :user # ...end
ファクトリは次のように書きます。
FactoryGirl.define do factory :user do name 'Foo' email 'foo@example.com' password 'password' password_confirmation 'password' endend
# spec/factories/categories.rbFactoryGirl.define do factory :category do association :user name 'Bar' endend
すると、次のように、スペック内で 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
へ、次のようにルーティングしているとします。
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 endend