gpt4 book ai didi

ruby-on-rails - 一个 rspec it 子句中的多个 should 语句 - 坏主意?

转载 作者:行者123 更新时间:2023-12-03 14:40:50 26 4
gpt4 key购买 nike

这是我的 rspec 测试:

it "can release an idea" do
james.claim(si_title)
james.release(si_title)
james.ideas.size.should eq 0
si_title.status.should eq "available"
end

是两个 should最后的台词真的是个坏主意吗?我在某处读到,你应该每 it 只测试一件事块,但是为了确保标题状态发生变化而进行整个测试似乎很愚蠢(相同的函数在我的代码中同时完成了这两件事)。

最佳答案

我对此的解释并不是说应该只有一个断言/调用 should每个规范,但每个规范应该只测试一点行为,例如

it 'should do foo and bar' do
subject.do_foo.should be_true
subject.do_bar.should be_true
end

不好 - 你同时在观察两种不同的行为。

另一方面,如果您的 2 个断言只是验证一件事的不同方面,那么我可以接受,例如
it 'should return a prime integer' do
result = subject.do_x
result.should be_a(Integer)
result.foo.should be_prime
end

对我来说,让一个规范检查它返回一个整数并单独一个它返回一个素数并没有太大意义。

当然,在这种情况下, be_prime 匹配器可以轻松地进行这两项检查 - 也许一个很好的经验法则是,如果您可以使用自定义匹配器明智地将它们减少到 1,则多个断言是可以的(实际上这样做是否真的值得)取决于你的情况)

在您的特定情况下,可以说有两种行为在起作用 - 一种是改变状态,另一种是改变 ideas收藏。我会改写您的规范以说明发布方法应该做什么 -
it 'should change the status to available'
it 'should remove the idea from the claimants ideas'

目前,这些事情总是同时发生,但我认为它们是不同的行为——你可以很容易地想象一个系统,其中多人可以声明/发布一个想法,并且只有当最后一个人发布这个想法时状态才会改变。

关于ruby-on-rails - 一个 rspec it 子句中的多个 should 语句 - 坏主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14068830/

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