gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:48:19 25 4
gpt4 key购买 nike

我有一段要测试的代码:

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 中现在是可能的。此提交后不再需要记录参数: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.new.save! 时调用 User.name)。但是,请记住,如果您使用的模型发生更改并且它在您的测试中变得有效(不再需要 User.name),这在将来可能会成为一个问题。

关于ruby-on-rails - 如何创建 ActiveRecord::RecordInvalid 进行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26024359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com