コピペコードで快適生活

明日使えるソースを自分のために

Rspecでcontrollerのテスト

controllerのテストをまともに書いたことなかったので。

describe TestController, type: :controller do
  let(:account) { create(:account) }

  describe 'auth' do
    context '有効なトークンを渡したとき' do
      before do
        token = TokenService.build_token(account)

        # sessionに値をセットできる
        session[:use_auth] = true

	# 指定のメソッドをparamsつきで呼ぶ
        get :auth, token: token
      end
      it '200を返す/ログインユーザが取得できる' do
        # ステータスコードをチェックできる
        expect(response).to have_http_status(200)

        # privateメソッドの値はcontroller.sendで取得できる
        current_user = controller.send :current_user
        expect(current_user.id).to eq account.id
      end
    end

    context '無効なトークンを渡したとき' do
      before do
        get :auth, token: 'xxxxxxx'
      end
      it '401を返す' do
        expect(response).to have_http_status(401)
      end
    end
  end
end