QA@IT
«回答へ戻る

回答を投稿

controller spec は Rack middleware を経由しないため、/auth/:provider にアクセスしても OmniAuth に処理がいくことはありません。

コントローラのテストの前提条件としてログインが必要ということでしたら、ログインした状態に見せかけるのがいいと思います (= ログインのフロー自体はテストしない)。例えば #current_user というメソッドでログイン状態を判定しているなら、以下のようになるでしょう:

before(:each) do
  ...

  controller.stub(:current_user) { @user }
end

ログインのフローを含めてテストしたいということでしたら、インテグレーションテストのための仕組みを使う必要があります (例えば Request Spec)。この場合、OmniAuth.config.test_mode = true は期待通りに動作するはずです。

controller spec は Rack middleware を経由しないため、```/auth/:provider``` にアクセスしても OmniAuth に処理がいくことはありません。

コントローラのテストの前提条件としてログインが必要ということでしたら、ログインした状態に見せかけるのがいいと思います (= ログインのフロー自体はテストしない)。例えば ```#current_user``` というメソッドでログイン状態を判定しているなら、以下のようになるでしょう:

``` ruby
before(:each) do
  ...

  controller.stub(:current_user) { @user }
end
```

ログインのフローを含めてテストしたいということでしたら、インテグレーションテストのための仕組みを使う必要があります (例えば [Request Spec](http://ja.asciicasts.com/episodes/257-request-specs-and-capybara))。この場合、```OmniAuth.config.test_mode = true``` は期待通りに動作するはずです。