rspec - 处理匹配器的弃用

时间:2014-08-19 12:57:31

标签: ruby-on-rails ruby ruby-on-rails-4 rspec

我一直关注指南everydayrailsrspec

如果他们说模型规范的其中一个示例应该将验证写成:

it "is invalid without a lastname" do
  expect(Contact.new(lastname: nil)).to have(1).errors_on(:lastname)
end

注意:我知道这是整本书中的一个随机例子。

这对我有意义。在我们的项目中,我们使用的是rspec 3,其中have匹配器已被弃用。阅读更多我看到你可以添加rspec-collection_matchers gem来解决这个问题。

所以我有两个问题:

如何在rspec 3中编写上述示例?我会选择

let(:contact) { FactoryGirl.build_stubbed(:contact) }

it "is invalid without a name" do
  contact.name = nil
  expect(contact).to_not be_valid
end

我的理解告诉我,我应该避开被弃用的东西,因为他们不再受到支持了。看看rspec-collection_matchers宝石,似乎就是这种情况。我的例子是否足够或是否有更好的方法?

第二个问题是我是否应该使用rspec-collection_matchers gem

感谢。

1 个答案:

答案 0 :(得分:1)

如果你想要明确,你可以写:

it "is invalid without a lastname" do
  contact = Contact.new(lastname: nil)
  contact.valid? # triggers validation
  expect(contact.errors[:lastname].size).to eq(1)
end