哪个Rspec约定更新?

时间:2014-01-15 21:06:17

标签: ruby-on-rails ruby rspec

哪个Rspec约定更新,应该在新项目中使用?

subject { [] }
it { should == [] }

subject { [] }
it { expect(subject).to eq([]) }

我没有找到使用expect方法隐式使用主题编写较短版本的方法。

2 个答案:

答案 0 :(得分:2)

使用expect(您的第二个示例)是更新的版本。 Rspec正在逐渐远离被添加到现有对象(例如should)的方法,因为它们偶尔会导致奇怪的行为。

答案 1 :(得分:2)

http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax

中所述

“将来,我们计划更改默认值,以便除非您明确启用,否则只有预期可用。我们可以在RSpec 3.0中尽快执行此操作,但我们希望为用户提供足够的时间来使用它“

我从这个站点复制:“潜在的问题是RSpec应该的语法:为了正常工作,它必须在系统中的每个对象上定义......但是RSpec并不拥有系统中的每个对象而无法确保它始终如一地工作。正如我们所见,它不像RSpec期望代理对象那样工作。请注意,这不仅仅是RSpec的问题;它也是minitest / spec的must_xxx语法的问题。“

就个人而言,我仍然使用两者的混合,因为所有“shoulda”匹配者都使用旧的语法,并且非常容易使用...