2017-02-21 5 views
2

は私がSO洗い上げてきましたし、他の誰の結果は私のために働くように見える:工夫RSpecの未定義のメソッド `のenv」nilのために:NilClass

を私は私のスペックについてControllerHelper方法考案のために提案されたものをオフに基づいています:

def login_existing_user 
    @request.env["devise.mapping"] = Devise.mappings[:user] 
    user = FactoryGirl.create(:user) 
    company = FactoryGirl.create(:company) 
    user.company_id = company.id 
    sign_in user 
end 

それは私の認証されたホームページを取得することができるようにするユーザーのためのサインアッププロセスのステップ2だので、私はまた、この方法でCompanyを作成しています。この時点で

、私はちょうど私のScansControllerSpecでユーザーをログインしようとしている:

RSpec.describe ScansController, type: :controller do 

    before(:all) do 
    login_existing_user 
    @device = build(:device) 
    end 

    describe "GET #create" do 
    it "returns http success" do 
     get :create, :device_id => @device.id 
     puts response 
     # expect(response).to have_http_status(:success) 
    end 
    end 

    .... 
end 

しかし、私は私のCRUDメソッドRSpecsの一人一人のためにこれを取得しています:

1) ScansController GET #create returns http success 
    Failure/Error: @request.env["devise.mapping"] = Devise.mappings[:user] 

    NoMethodError: 
     undefined method `env' for nil:NilClass 
    # ./spec/support/controller_helpers.rb:15:in `login_existing_user' 
    # ./spec/controllers/scans_controller_spec.rb:6:in `block (2 levels) in <top (required)>' 

他の投稿が示唆しているように、私はファイルにDevise::TestHelpersを含めています。最後に

RSpec.configure do |config| 
    config.include Devise::TestHelpers, type: :controller 
    config.include Warden::Test::Helpers 
    Warden.test_mode! 

    config.infer_spec_type_from_file_location! 

    config.include ControllerHelpers, type: :controller 

    config.after do 
    Warden.test_reset! 
    end 
end 

、私は、コントローラのメソッドの仕事を保護し、テストするには、ユーザーがログインできるようにする必要があります:私もControllerHelpersを用意しました。私はこれが関連問題であるかどうか分からないので、ユーザーはcompanyを持っていなければならず、企業はログインに成功するためにsubscriptionを持っていなければなりません。

...私このエラーが私を抱きしめているので、これまでにもそれを得ることはできません。

+0

コントローラテストは、あなたが 'request'オブジェクト(なし' @ ')にアクセスしたいならば、あなたが作るために定義さ、実際の要求を介して実行していませんこれらの要求仕様。 – Anthony

+0

@Anthony申し訳ありませんが、私は非常に従っていないテストに新しいです。では、保護されたすべてのコントローラーメソッドをテストするにはどうしたらいいですか?私は私の 'application_controller.rb'でDeviseの' before_action:authenticate_user! 'を持っています。これは私がログインしたユーザを模倣する必要があると信じさせてくれます。 – Godzilla74

+0

また、テストから 'login_existing_user'を取り出した場合、私は自分のログインページにリダイレクトされます。 – Godzilla74

答えて

関連する問題