LoginSignup
18
19

More than 5 years have passed since last update.

RSpecでsessionを使用した処理のテスト(ログイン機能)

Posted at

内容としてはajaxのテストを書こうとして、それにはsessionが必要というような場合です。(渡しの場合、ログインしていないとajax通信ができないという仕様でした。)

ここけっこう困って、前回こういったsessionを使うテストを実装した際にはgrapeというRails向けのREST APIのフレームワークを使っていたのでこれはまた別問題でした。(grapeはrackを使ってsession設定できます)


想定したアプローチは2つあって

  • controller specを使ってテスト

  • postで実際にログインさせてからテストを実行

1つ目はやってみたのですがテスト内ではsessionを使えたのですがアプリ内での引き継ぎができなくてうまくいきませんでした、が、ブログ書きながらちょろちょろ調べて見てると出来そうな雰囲気もあるのでまた次回試してみます。。

2つ目が今回の実装でやったのですが、挙動的にはこっちのほうがいいのかなと。

require 'spec_helper'

describe CalendarController do
  before do
    @user = create(:user)
    post '/login', {:username => @user.name, :password => @user.password}
  end

  context 'create' do
    
    it do
      xhr :post, 'hoge/fuga', {:hoge => 1, :fuga => 'fuga'}
      expect(response.body).to eq({:success => true, :data => {}.to_json})
      response.code.should == "200"
    end
  end

end 

というような感じです。
実際のログインユーザーが行う処理という流れに沿っている分テスト的には良いかなと思いました。
xhrでajax通信を使ったgetやpostが行えます。その後に中身とステータスコード200をチェックしているというような形です。

 
ただ、普通にsession[:calendar_id]みたいなのを使いたいというような時は1つ目のアプローチが必要と思いますので、また解決し次第ブログに書きたいと思います。

18
19
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
18
19