使用Devise的可确认模块进行测试(RSpec)
我的理解是Rails的测试环境在每次测试之前被拆除并重建……所以我如何测试一个控制器,该控制器要求用户登录并且如果没有Device的可确认模块阻碍,则无法创建用户?
Devise 推荐的方法 (下面)创建一个新用户,然后由Devise的可confirmable
模块发送一封电子邮件。 我如何解决这个问题,所以我不是每次都“创造”一个用户…或者如果我是,我可以得到一个对象来测试w / out“模拟”每个规范的新电子邮件?
before(:each) do @user = Factory.create(:user) sign_in @user end
我敢肯定我会忽略一些非常明显的东西,因为对于任何使用Devise并且可以确认的人来说这一定是一个非常常见的规范。
在您的测试环境中, ActionMailer::Base.delivery_method
应设置为:test
,这意味着不会发送这些电子邮件。 如果通过config/environments.rb
中的配置将此设置设置为其他内容(例如smtp
,则会发送电子邮件。
如果该设置已经存在,那么要使用User
对象(如同,实际上可以登录),您需要调用confirm!
在上面:
user = User.first user.confirm!
最新的FactoryGirl版本:
FactoryGirl.define do factory :confirmed_user, :parent => :user do after(:create) { |user| user.confirm! } end end
如果您使用after_create
生成模型,则可以使用after_create
来确认每个新用户。
Factory.define :confirmed_user, :parent => :user do |f| f.after_create { |user| user.confirm! } end
今天它只是放:
confirmed_at 7.days.ago
在你的制作上
对于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
尝试存根active?
@user = Factory.create(:user) @user.stub(:active?).and_return(true) sign_in @user
您可能还需要存根confirmed?
,我对Devise不太熟悉。
对于制造gem来说
Fabricator(:user) do after_build { |user| user.confirm! } end
- 获得:“迁移正在等待; 运行’bin / rake db:migrate RAILS_ENV = development’来解决此问题。“克隆并迁移项目后
- Rails开发 – 无法连接到’localhost’上的MySQL服务器(10061)
- RSpec如何打开?
- Rails和RSpec – 测试关注类方法
- 如何从Rails中的RSpec测试中调用app helper方法?
- Rails 4 – 语法错误,意外的tIDENTIFIER,期望输入结束
- 来自Hartl教程的bundle exec rspec spec / requests / static_pages_spec.rb无效
- 如何删除unit testing并用rspec替换它?
- Rspec spec和Rake规范给出了不同的结果
- rails生成rspec:install config / environments / development.rb:1:在`’:undefined method`configure’
- 使用具有Rspec视图的Factory Girl