在我的某些控制器中,我需要使用属于我的登录用户(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'
答案 0 :(得分: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