我一直关注指南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
感谢。
答案 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