0

一部のコントローラーでは、ログインしているユーザー ( current_user.groups) に属するグループを使用する必要があります。テストしようとすると; 私はこれを持っていないようcurrent_userです:

ActionView::Template::Error: undefined method `authenticate' for nil:NilClass

そこで、Devise でその current_user を作成する必要があると考えました。

Devise のドキュメントを読み、 test_helper.rb に以下を追加する必要があると述べています

class ActionController::TestCase
  include Devise::TestHelpers
    def setup
        @request.env["devise.mapping"] = Devise.mappings[:user]
        sign_in FactoryGirl.create(:user)
    end
end

ただし、これはうまくいかないようです。実行するたびにrake test、次のエラーが発生します。

  1) Error:
ActivitiesControllerTest#test_should_create_activity:
NameError: uninitialized constant ActionController::TestCase::FactoryGirl
    test/test_helper.rb:22:in `setup'
4

1 に答える 1

3

Gemfile に factory_girl_rails gem を含める必要があります。通常、開発グループとテスト グループの両方に含めますが、この例ではテスト環境だけで問題ありません。

group :development, :test do
    gem 'factory_girl_rails'
end

そして実行しbundle installます。

factory_girl_rails は、テストでユーザー フィクスチャを作成するときに使用されます。

sign_in FactoryGirl.create(:user)

次に、ファクトリを作成する必要があります (これはフィクスチャのようなものです)。

rails generate factory_girl:model user

これにより、ファイルが作成されます。test/factories/users.rb

factory_girl_rails とファクトリーの定義方法について詳しくは、https ://github.com/thoughtbot/factory_girl_rails をご覧ください。

于 2013-10-09T10:24:06.033 に答える