Mel*_*emi 29 rspec ruby-on-rails devise
我的理解是Rails的测试环境在每次测试之前被拆除并重建......所以我如何测试一个需要用户登录的控制器,如果没有Device的可确认模块阻碍,则无法创建用户?
Devise 推荐的方法(下面)创建一个新用户,然后由Devise的confirmable模块发送一封电子邮件.我如何解决这个问题,所以我不是每次都"创建"一个用户......或者如果我是的话,我可以得到一个对象来测试每个规范的"模拟"新电子邮件吗?
before(:each) do
@user = Factory.create(:user)
sign_in @user
end
Run Code Online (Sandbox Code Playgroud)
我敢肯定我会忽略一些非常明显的东西,因为对于任何使用Devise并且可以确认的人来说这一定是一个非常常见的规范.
Rya*_*igg 34
在您的测试环境中ActionMailer::Base.delivery_method应该设置为:test,这意味着这些电子邮件不会被发送出去.如果设置为别的东西,如smtp在说一个配置的方式config/environments.rb,那么电子邮件将被发送出去.
如果该设置已经存在,那么要使用该User对象(如同,实际上能够登录),您需要调用confirm!它:
user = User.first
user.confirm!
Run Code Online (Sandbox Code Playgroud)
enr*_*stn 17
最新的FactoryGirl版本:
FactoryGirl.define do
factory :confirmed_user, :parent => :user do
after(:create) { |user| user.confirm! }
end
end
Run Code Online (Sandbox Code Playgroud)
Rya*_*arn 13
如果您使用factory_girl生成模型,则可以使用它after_create来确认每个新用户.
Factory.define :confirmed_user, :parent => :user do |f|
f.after_create { |user| user.confirm! }
end
Run Code Online (Sandbox Code Playgroud)
对于Devise 4.2,现在为confirm(不是confirm!)。
4.2.0-2016-07-01
删除Devise :: Models :: Confirmable#confirm!方法,请改用确认。
下面的代码还可以防止由于after(:build)vs after(:create)设置而产生邮件confirmed_at
FactoryGirl.define do
factory :user do
after(:build) { |u| u.skip_confirmation_notification! }
after(:create) { |u| u.confirm }
...
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11540 次 |
| 最近记录: |