加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何创建ActiveRecord :: RecordInvalid进行测

发布时间:2020-12-16 21:03:52 所属栏目:百科 来源:网络整理
导读:我有这段代码,我试图测试: def error_from_exception(ex) if ex.is_a?(ActiveRecord::RecordInvalid)... 要进入if块,我需要传入正确的ex参数. 如何创建ActiveRecord :: RecordInvalid? 使用rspec,我试图做这样的事情: context 'exception is ActiveRecord
我有这段代码,我试图测试:
def error_from_exception(ex)
  if ex.is_a?(ActiveRecord::RecordInvalid)
...

要进入if块,我需要传入正确的ex参数.

如何创建ActiveRecord :: RecordInvalid?

使用rspec,我试图做这样的事情:

context 'exception is ActiveRecord::RecordInvalid' do
  it 'returns the validation error' do
    begin
      raise ActiveRecord::RecordInvalid
    rescue Exception => ex
      binding.pry
      ###
      # From my pry session:
      # $ex
      # $<ArgumentError: wrong number of arguments (0 for 1)>
      # $ex.class
      # $ArgumentError < StandardError
      ###
    end


  end
end

如何找出库正在寻找的参数类型?

RecordInvalid link

解决方法

编辑:现在可以在Rails 5.1.1中使用.此提交后不再需要record参数: https://github.com/rails/rails/commit/4ff626cac901b41f86646dab1939d2a95b2d26bd

如果您使用的是5.1.1下的Rails版本,请参阅下面的原始答案:

似乎不可能自己引发ActiveRecord :: RecordInvalid.如果查看ActiveRecord :: RecordInvalid的源代码,初始化时需要记录:

class RecordInvalid < ActiveRecordError
  attr_reader :record # :nodoc:
  def initialize(record) # :nodoc:
    @record = record
    ...
  end
end

(来源:https://github.com/rails/rails/blob/master/activerecord/lib/active_record/validations.rb)

你可以做的事情就是简单地创建一个无效的实际记录并尝试使用save保存它! (例如在需要User.name时调用User.new.save!).但是,请记住,如果您使用的模型已更改且在测试中变为有效(不再需要User.name),则此可能在将来成为问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读