在测试单元中使用Devise的current_user

时间:2013-10-09 09:55:04

标签: ruby-on-rails ruby devise ruby-on-rails-4 factory-bot

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

1 个答案:

答案 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