我正在使用现有的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_at
包括在方程式Time.now
中。这就是我构建管理员的方式:
factory :admin_user, :parent => :user do
email ADMIN_USER_EMAIL
end
ADMIN_USER_EMAIL是引用实际管理员电子邮件地址的ENV变量。由于它继承自:parent => :user
我不知道还有什么可以尝试确认管理员?
答案 0 :(得分:0)
好吧,无论如何,这是一个蹩脚的问题,但我找到了导致319规格破坏的底线。
Devise的一个特点:可确认的是,不仅需要确认帐户,还需要确认帐户的任何更改。
更新/分配用户工厂存根的规范(更新是user.email=
还是gift_payment.user.xyz=
等)导致undefined method for nil class
。
所以我进入了我的factories.rb
和spec_utilities.rb
以及所有单独的规范,以确保调用user.confirm!
。
更改工厂和实用程序方法会将319错误降低到大约30,从那里我不得不进入每个规范并在各个地方撒上confirm!
。
仍然不确定我的方法是否偏离基础,但是我的规格已经下降到0 ...(暂时)。