3

アプリケーションのすべてのルートをテストしたいのですが、統合テストでそれを実行する必要があることを学びました。RubyonRailsでルートをテストする場所

ただし、次のエラーが発生します。

NoMethodError: undefined method `authenticate?' for nil:NilClass
/usr/local/Cellar/ruby/1.9.3-p194/lib/ruby/gems/1.9.1/gems/devise-2.1.2/lib/devise/rails/routes.rb:286:in `block in authenticated'

統合テストでDevise::TestHelpersを使用できないことはオンラインでよく知られています-DeviseGoogleGroup DeviseGithub ページ


次のようなルートをテストするにはどうすればよいですか?

# config/routes.rb

devise_for :users

authenticated :user do
  root to: 'static#home'
end

root to: 'static#landing'

私はテストユニットテストを実行しています$ rake test:integration

4

2 に答える 2

6

Devise :: TestHelpersは、セッションに直接物事を入れることで機能します。Capybaraとの統合テストを実行する場合、サーバー側のセッションにアクセスできません。ブラウザにアクセスできるだけです。

このアプリケーションでは、統合テストで次のようなヘルパーメソッドを使用します。これらのメソッドは、ユーザーインターフェイスを介してDeviseと対話します。

def authenticate(user, password = nil)
  password ||= FactoryGirl.attributes_for(:user)[:password]
  visit new_user_session_path
  fill_in 'email', with: user.email
  fill_in 'password', with: password
  click_on 'Login'
  expect(current_path).to eq welcome_path
end
于 2013-01-01T18:58:43.407 に答える
4

統合テストは、アプリケーションのワークフローにとって重要です。彼らはあなたのURL定義についてより明確に伝えることができます。

このエラーの原因と認証されたルートの解決策を説明しているによる投稿を確認してください。nicholaides

それでも問題は次のとおりです。

Deviseには独自のメソッドがあり、rubyでDevise::TestHelpersを使用することはできません。では、どのようにテストできますか?さて、どういうわけかDevise::TestHelpersを含める必要があります。

RSpecを使用している場合は、次の名前のファイル内に次のように配置できますspec/support/devise.rb

RSpec.configure do |config|
  config.include Devise::TestHelpers, :type => :controller
end

これはここで指定されます。

しかし、待ってください..........繰り返しますが、。でこれと同じ問題が発生する可能性がありますTest::Unit

それで?

したがって、deviseテストヘルパーをtest/test_helper.rbに追加する必要があります。

class ActiveSupport::TestCase
  include Devise::TestHelpers
end
于 2013-01-25T10:35:59.827 に答える