1

Railsには、ユーザーがコントローラーの特定のアクションの管理者であることを確認して要求するbefore_filterがあります。

ただし、これらのコントローラーのテストを作成する必要があります。

だから、私はこのように見えるものを持っています:

test "should get create" do
    assert_difference('Event.count') do
      post :create, FactoryGirl.build(:event)
    end
    assert_not_nil assigns(:event)
    assert_response :success
  end 

user_factory.rb:

FactoryGirl.define do

  factory :admin do
   email 'aa@example.com'
   password 'password'
   password_confirmation 'password'
   admin true
  end
end

ただし、イベントを作成できるようにするには、管理者としてログインする必要があります。これを行う方法についてのアイデアはありますか?admin列は、usersテーブルのtrue/false列です。

編集:最初の試み:

 test "should get create" do
    admin = Factory(:admin)
    login_as(admin)
    assert_difference('Event.count') do
      post :create, FactoryGirl.build(:event)
    end
    assert_not_nil assigns(:event)
    assert_response :success
  end

エラーを生成します:

 1) Error:
test_should_get_create(EventsControllerTest):
NameError: uninitialized constant Admin

アップデート:

FactoryGirl.define do

  factory :user do
   email 'aa@example.com'
   password 'password'
   password_confirmation 'password'
  end
end

test "should get create" do
    login_as(FactoryGirl.create(:user, admin: true))
    assert_difference('Event.count') do
      post :create, FactoryGirl.build(:event)
    end
    assert_not_nil assigns(:event)
    assert_response :success
  end

エラーが発生しますtest_should_get_create(EventsControllerTest): NoMethodError: undefined method 'login_as' for #<EventsControllerTest:0x007fb4faec1b28>

4

1 に答える 1

4

を定義するとfactory(:admin)、FactoryGirlはと呼ばれるクラスを探しAdminます。そのため、このエラーが発生します。

admin;用に別のファクトリを作成する必要はありません。ユーザーファクトリを使用して渡すことができますadmin: true(これにより、デフォルトのファクトリ設定が上書きされます)。そうしてくださいadmin = Factory(:user, admin: true)userもちろん、ファクトリが定義されていることを確認してください。

ファクトリを保持する場合:adminは、クラスが。であることを指定する必要がありますUser。構文は次のようになりますfactory(:admin, class: "User")

于 2012-08-19T22:33:45.630 に答える