0

我正在开发一个现有的 Rails 应用程序(30 多个模型,30 多个控制器)并尝试实现 Devise 的可确认(现在用户在注册期间不会被提示创建密码)。

我的问题是两个(看似)小动作导致 300 个规格开始失败......我希望有经验的人提供任何建议,以帮助我避免在任何兔子洞中走得太远。

两个动作:

(1)在user.rb我添加:confirmable到设计配置中:

devise :database_authenticatable, :recoverable, :rememberable, :confirmable, ...

(2)在devise.rb我取消注释掉allow_unconfirmed_access配置:

config.allow_unconfirmed_access_for = 2.days

这两个动作导致我所有规格的近 1/4 开始失败。在我开始深入研究每个规范并进行更改之前,有人可以让我知道我缺少什么或指出我正确的方向吗?

更新我已将原因缩小到我认为是管理员权限问题。针对普通用户的规范正在通过,但是任何需要管理员登录的测试现在都失败了(例如,预期响应为 200 的规范返回 302 或 401...)

在我的工厂中,对于普通用户,我包括confirmed_ateq Time.now。这就是我构建管理员的方式:

  factory :admin_user, :parent => :user do
    email ADMIN_USER_EMAIL
  end

其中 ADMIN_USER_EMAIL 是一个引用实际管理员电子邮件地址的 ENV 变量。由于它继承自我:parent => :user不确定还有什么可以尝试确认管理员?

4

1 回答 1

0

好吧,无论如何这是一个蹩脚的问题,但我找到了导致 319 规格中断的原因。

Devise 的 :confirmable 的特点之一是不仅需要确认账户,而且对账户的任何更改也需要确认。

更新/分配用户工厂存根的规范(无论是更新user.email=还是gift_payment.user.xyz=等)导致undefined method for nil class.

所以我进入了我的factories.rbspec_utilities.rb所有的个人规范,以确保user.confirm!被调用。

更改工厂和实用方法使 319 错误减少到大约 30 个,从那里我不得不进入每个规范并撒confirm!在不同的地方。

仍然不确定我的方法是否偏离基础,但我的失败规范已降至 0...(目前)。

于 2013-10-22T18:07:02.257 回答