gpt4 book ai didi

ruby-on-rails - 如何测试RuntimeError在Ruby中正确使用字符串插值?

转载 作者:行者123 更新时间:2023-12-03 08:46:00 25 4
gpt4 key购买 nike

我有一个方法可以在数据库中记录对特定记录的更改,但是首先,它会在进一步检查之前检查类别类型的有效性。如果返回false,则会引发错误。

class UpgradePackageRecorder

CATEGORIES = [ an array of categories here ... ]

def initialize(category)
@category = category
end

def record_change
unless valid_category?
raise "#{category} is not a recognized category"
end

other_methods
end

private

def valid_category?
CATEGORIES.include?(category)
end

end

我开始为此编写rspec测试,以验证是否正确引发了错误。这是测试用例:
RSpec.describe UpgradePackageRecorder do
describe '#record_change' do
context 'the package type is invalid' do
it 'raises an error' do

recorder = UpgradePackageRecorder.new('Bronze')

expect { recorder.record_change }.to raise_error(RuntimeError, /bronze is not a recognized category/)
end
end
end
end

当我运行测试时,出现以下错误:
Failure/Error: raise "#{category} is not a recognized category"

RuntimeError:
bronze is not a recognized category

为什么这样显示字符串插值?我也尝试过 category + ' is not a recognized category,但不能解决问题。

为了使这一点更加困惑,我取出了字符串插值,仍然看到了这个问题:
Failure/Error: raise "Unrecognized category"

RuntimeError:
Unrecognized category

最佳答案

我想到了!

最终对我有用的语法是:

it 'raises an error' do

expect do
UpgradePackageRecorder.new(
'Bronze'
).record_change
end.to raise_error(
RuntimeError, /bronze is not a recognized category/
)

end

另外,在我删除的 expect块中还有另一个 it。它正在验证 record_change方法是否继续创建某个对象。

关于ruby-on-rails - 如何测试RuntimeError在Ruby中正确使用字符串插值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54296866/

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