gpt4 book ai didi

ruby - 你能在 RSpec 中同时测试状态变化和返回值吗?

转载 作者:太空宇宙 更新时间:2023-11-03 16:14:39 26 4
gpt4 key购买 nike

假设我有一个方法 MyKlass#do_thing 我想在测试中只调用一次(因为它可能会改变状态),并且应该返回 true状态更改成功,否则为 false。我想写一个看起来像这样的规范:

it "Updates myvalue if condition is met" do
wojit = MyKlass.new

# ... assuming condition is met
expect { wojit.do_thing }.to change { wojit.value }.and.be true
end

但是这种特殊的方法会得到一个 ArgumentError,因为 #and 需要 1 个参数。

我可以让它与以下可憎的东西一起工作:

expect { expect(wojit.do_thing).to be true }.to change { wojit.value }

但这太棒了。我是不是漏掉了一些更惯用的东西?

最佳答案

另一种方法是将返回值放在变量中。

return_value = nil
expect{ return_value = wojit.do_thing }.to change{ wojit.value }
expect( return_value ).to be true

关于它比嵌套 expects 更好还是更差的 YMMV。

关于ruby - 你能在 RSpec 中同时测试状态变化和返回值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49256551/

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