Here are the failures side-by-side:

```
Failures:

  1) Cookbook validations requires deprecated cookbooks to specify a replacement
     Failure/Error: expect(cookbook.errors[:replacement]).to_not be_empty
       expected empty? to return false, got true
     # ./spec/models/cookbook_spec.rb:73:in `block (3 levels) in <top (required)>'

  2) Cookbook validations when deprecated should require replacement to be set
     Failure/Error: it { should validate_presence_of(:replacement) }
       Expected errors to include "can't be blank" when replacement is set to nil, got errors: ["name can't be blank (nil)", "name is invalid (nil)", "lowercase_name can't be blank (\"\")", "maintainer can't be blank (nil)", "description can't be blank (nil)", "cookbook_versions can't be blank (#<ActiveRecord::Associations::CollectionProxy []>)", "category can't be blank (nil)"]
     # ./spec/models/cookbook_spec.rb:60:in `block (4 levels) in <top (required)>'
```

Personally, I like the second message better at the expense of a longer spec. I also like that the current spec doesn't require too much RSpec-specific knowledge. Your thoughts, @tristanoneil?