【问题标题】:Using Devise's current_user in Test Unit在测试单元中使用 Devise 的 current_user
【发布时间】:2013-10-09 09:55:04
【问题描述】:

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

【问题讨论】:

  • 您的 Gemfile 的测试组中是否包含 factory_girl_rails gem?
  • 我以为它是随 Devise gem 一起提供的。因为整个登录/注册的事情在我的应用程序中就像一个魅力。
  • 那我为什么不需要它才能正常登录?

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


【解决方案1】:

您必须在 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

【讨论】:

  • 它向我抛出了这个:PictogramsControllerTest#test_should_update_pictogram: ArgumentError: Factory not registered: user test/test_helper.rb:21:in setup'`
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多