5

rspec をバージョン 2 から 3 にアップグレードしました。その後、その問題に直面しました。

Failures:

  1) AlbumsController GET #edit 
     Failure/Error: sign_in_and_switch_schema @user
     NoMethodError:
       undefined method `env' for nil:NilClass
     # ./spec/support/auth_helpers.rb:10:in `sign_in_and_switch_schema'
     # ./spec/controllers/albums_controller_spec.rb:12:in `block (2 levels) in <top (required)>'

spec_helper.rbには以下が含まれます。

 RSpec.configure do |config|
    # most omitted
    config.include Warden::Test::Helpers
    config.include Devise::TestHelpers, type: :controller
 end

albums_controller_spec.rb :

describe AlbumsController do

  let(:album) { create(:album) }

  before(:all) do
    @user = create :user
  end

  before(:each) do
    sign_in_and_switch_schema @user
  end

  after(:all) do
    destroy_users_schema @user
    destroy_user @user
  end

 # describe's part omitted
end

エラーが発生したauth_helpers.rb部分:

def sign_in_and_switch_schema(user)
 # binding.pry
 @request.env["devise.mapping"] = Devise.mappings[:user] # <- error line
 sign_in :user, user

 Apartment::Tenant.switch(user.username) 
end

別の同様の Q&A を探していましたが、何も役に立ちませんでした。もっと何かを含める必要があるかどうか教えてください。前もって感謝します。

4

2 に答える 2

3

Devise TestHelper documentationによると、使用する必要があるのは

@request.env["devise.mapping"] = Devise.mappings[:user]

Devise コントローラーを継承するコントローラーをテストする場合。AlbumsController は Devise Controller を継承していないと思います。これらのテストにその行は必要ないと思います。

この行を削除するか、sign_in と switch のみを行う別のヘルパー メソッドを作成してみてください。

def simple_sign_in_and_switch(user)
  sign_in :user, user
  Apartment::Tenant.switch(user.username)
end

そして、テスト ケースで代わりにそのメソッドを呼び出します。

before(:each) do
  simple_sign_in_and_switch_schema @user
end

これが機能する場合は、問題のある行を完全に削除し、完全なテスト スイートを実行して、他の場所で必要かどうかを確認してください。そうである場合は、別の方法でその行を抽出し、必要な場合にのみ使用します。

于 2014-08-12T19:57:21.687 に答える