Helpful rspec matchers for testing validations and associations.
Pull request Compare This branch is 20 commits behind pat:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


== Active Matchers

Some helpful rspec matchers for testing validations and associations. It is not complete, especially in the case of validations, and lacking in documentation, but might be useful nonetheless.

To install:
  script/plugin install

Make sure, in your spec_helper.rb file, you add an include as follows:
  config.include ActiveMatchers::Matchers

I'd like to make that automatic, but haven't figured out how to just yet.

=== Examples

Test validates_presence_of :name
  Model.should need(:name).using(@valid_attributes)

Test validates_uniqueness_of :name
  Model.should need(:name).to_be_unique.using(@valid_attributes)

Test presence of at least one field being required
  Model.should need.one_of(:first_name, :last_name).using(@valid_attributes)

Test validates_length_of :name matches database field length
  Model.should limit_length_of(:name).using(@valid_attributes)

Test validates_length_of :name, :maximum => 255
  Model.should limit_length_of(:name).to(255).using(@valid_attributes)

You can group multiple validation checks together like so:
  using(@valid_attributes) do
    Model.should need(:name)
    Model.should limit_length_of(:name).to(255)

Also allows confirmation of the presence of associations

Test belongs_to :parent
  Model.should belong_to(:parent)

Test belongs_to :parent, :class_name => "CustomClass", :foreign_key => "some_id"
  Model.should belong_to(:parent).with_options(
    :class_name => "CustomClass", :foreign_key => "some_id")

Test has_many :items
  Model.should have_many(:items)

Test has_many :items, :class_name => "CustomClass", :foreign_key => "some_id"
  Model.should have_many(:items).with_options(
    :class_name => "CustomClass", :foreign_key => "some_id")
Similar testing available for has_one (Model.should have_one) and has_and_belongs_to_many (Model.should have_and_belong_to_many)

Copyright (c) 2007 Pat Allan & James Healy, released under the MIT license