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