LoginSignup
2
2

More than 5 years have passed since last update.

Rspec requestを利用する際にsessionの設定をする為の工夫(とりあえずこうでいい?)

Posted at

クールな方法は無さそうだったので、望むようなsessionの状態を作るURLをテスト用にのみ公開するのが良いと考えた。例としてユーザーのログイン情報がセッション上にuser_idとして格納されている状態を作りたい場合:

routes.rb
  if Rails.env.test? # こうしておけばテストでだけ使えるURLにできる
    get 'test/user/session/:id', to: 'test#getSession'
    post 'test/user/session/:id', to: 'test#userSession'
  end
test_controller.rb
class TestController < ApplicationController
  skip_before_filter :authorize

  def userSession
    user = User.find_by_id params[:id] # ここをidで取らない実装もあり得る
    session[:user_id] = user.id
    head :no_content
  end

  def getSession
    render json: session # テストなのでセッション丸々返しても大丈夫だろう(いい加減)
  end

end
test_spec.rb
require 'spec_helper'

describe 'create user' do

  before do
    @user = FactoryGirl.create(:user)
  end

  it "should" do
    post "test/user/session/#{@user.id}" # postするとセッション情報作成できる

    get "test/user/session/#{@user.id}" # getでセッション情報取得
    ret = JSON.parse(response.body)
    ret['user_id'].should == @user.id
  end

end

もっと楽な方法を知っている人がいたら是非教えてください。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2