【问题标题】:current_user returns TrueClass instead of a User in a controller using Devisecurrent_user 在使用 Devise 的控制器中返回 TrueClass 而不是 User
【发布时间】:2011-05-13 13:59:46
【问题描述】:

我在 Rails 2.3.8 项目中使用 Devise 1.0.8。在我的控制器测试中,我有:

context "when current_user is admin" do
  should "render" do
    sign_in Factory(:admin)
    get :index
    assert_response :success
  end
end

在控制器本身中,有以下 before_filter:

def redirect_if_not_admin
  puts current_user
  redirect_to root_path unless current_user.try(:admin?)
end

这是我的测试的输出:

true
false

NoMethodError: undefined method `admin?' for true:TrueClass

所以当我在测试中使用 sign_in 时 current_user 为真。但是,当我不这样做时, current_user 为零,因此肯定会受到影响。提前感谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails unit-testing testing devise


    【解决方案1】:

    我用了确认!在 after_create/build 中的资源上的方法,而不是在工厂中设置属性,这就是诀窍。当网站上有未确认的用户(已注册但尚未点击发送给他们的确认链接的用户)时,current_user 等于 true。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      • 1970-01-01
      相关资源
      最近更新 更多