`have` matcher接受单数形式的物品?

时间:2014-01-24 08:24:12

标签: ruby rspec

我正在代码学校为Rspec做教程,并且有一个这样的示例代码。

describe Zombie do
  it 'increases the number of tweets' do
    zombie = Zombie.new(name: 'Ash')
    zombie.tweets.new(message: "Arrrgggggggghhhhh")
    zombie.tweets.should have(1).tweets
  end
end

它希望有一条推文,所以我将have(1).tweets重写为have(1).tweet。然后它也有效。

但在documentation中,没有迹象表明单数形式被接受。

我想知道建议使用哪种方式,have(1).tweetshave(1).tweet

1 个答案:

答案 0 :(得分:1)

have(n)之后的方法调用是“语法糖”,可以是您想要的任何内容,如https://www.relishapp.com/rspec/rspec-expectations/v/2-99/docs/built-in-matchers/have-n-items-matcher中的Relish文档以及早期版本中所述。

我引用了2.99 Relish页面,因为从3.0开始,此功能已移至https://github.com/rspec/rspec-collection_matchers的单独rspec-collections_matcher gem。您将找不到3.0文档中提到的匹配器。

至于是否应该使用单数或复数形式的“推文”,我相信有一个共识,就英语而言,单数形式代表了这个特定情况的正确语法。如果没有明确的共识,请参见https://meta.stackexchange.com/questions/165244/is-negative-one-plural