2011-10-15 39 views
9

omniauthのfacebook sign in integrationを使用するように構成されたdeviseを使用しています。 私を得る私のspec/requestのテストからsign_inメソッドを呼び出す:rspecとdeviseによる統合テストsign_in env

undefined method `env' for nil:NilClass 

が仕様:

describe FacebookController do 
    include Devise::TestHelpers 

    it "should display facebook logged in status" do 
    @user = User.create(:id => "123", :token => "token") 
    sign_in @user 
    visit facebook_path 
    end 
end 
+0

私はコントローラテストで動作するdevith github wikiの解決策です[https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-and-4 - (および-RSpec)](https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-and-4-(and-RSpec)) –

答えて

7

あなたのコードは私のようにたくさん見える - 私はカピバラと工夫TestHelper機能を使用しようとしていた、とそれはあなたができないことがわかります、https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybaraによると。それを行うための推奨される方法はそのページで説明されており、それは私のために働いた。明確にすることが

は、ここで私がやったことだ - spec_helper.rbに:

RSpec.configure do |config| 
    config.include Warden::Test::Helpers 
end 
Warden.test_mode! 

そして、私のコードでは、単に - logout :user。これらは、直接アクセスする必要があるため

私たちは工夫のsign_inとsign_out方法で構築を使用することはできませんなぜあなたは迷っているならば、それはです:ここでは

は工夫のwikiによると、あなたはsign_outを使用できない理由、ですCapybaraを使用している間は利用できないリクエストオブジェクトに渡します。両方のメソッドの機能をバンドルするには、ヘルパーメソッドを作成します。

概ね、MiniTestとに対し、と言うことを意味し、要求(@request)を表すオブジェクトは、カピバラと起こらないテストケースクラスのインスタンス変数として追加されます。詳細を知るためのコードは見ていませんが、基本的には、このオブジェクトがサインインクレデンシャルのあるCookieストアにアクセスすることを期待しています。 Capybara/RSpecでは、これは起こっていないと私は思います。

関連する問題