は私が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
を持っていなければなりません。
...私このエラーが私を抱きしめているので、これまでにもそれを得ることはできません。
コントローラテストは、あなたが 'request'オブジェクト(なし' @ ')にアクセスしたいならば、あなたが作るために定義さ、実際の要求を介して実行していませんこれらの要求仕様。 – Anthony
@Anthony申し訳ありませんが、私は非常に従っていないテストに新しいです。では、保護されたすべてのコントローラーメソッドをテストするにはどうしたらいいですか?私は私の 'application_controller.rb'でDeviseの' before_action:authenticate_user! 'を持っています。これは私がログインしたユーザを模倣する必要があると信じさせてくれます。 – Godzilla74
また、テストから 'login_existing_user'を取り出した場合、私は自分のログインページにリダイレクトされます。 – Godzilla74