在 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
用户工厂.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>