gpt4 book ai didi

ruby - 我如何在 RSpec 中引发异常的 `expect`?

转载 作者:数据小太阳 更新时间:2023-10-29 06:26:22 26 4
gpt4 key购买 nike

我有一个方法可以对 Cat 模型执行一些操作,如果输入不正确会引发异常:

context "hungry cat" do
it { expect { eat(what: nil) }.to raise_error }
end

我想做的是检查这个方法是否改变了猫的状态,就像那样:

context "hungry cat" do
it { expect { eat(what: nil) }.to raise_error }
it { expect { eat(what: nil) }.not_to change(cat, :status) }
end

问题在于,由于 eat(what: nil) 将引发异常,因此第二个 it 无论如何都会失败。那么,是否可以忽略异常并检查某些条件?

我知道可以这样做:

it do 
expect do
begin
eat(what: nil)
rescue
end
end.not_to change(cat, :status)
end

但它太丑了。

最佳答案

您可以 chain使用 的肯定断言。如果你想在链中混入一个否定的,RSpec 3.1 引入了 define_negated_matcher .

你可以这样做:

RSpec::Matchers.define_negated_matcher :not_change, :change

expect { eat(what: nil) }
.to raise_error
.and not_change(cat, :status)

灵感来自 this comment .

关于ruby - 我如何在 RSpec 中引发异常的 `expect`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16858899/

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