active-matchers icon indicating copy to clipboard operation
active-matchers copied to clipboard

Helpful rspec matchers for testing validations and associations.

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.

h2. Install

script/plugin install http://github.com/pat/active-matchers.git

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

h2. Usage

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)

Test @validates_length_of :name, :minimum => 3@

Model.should limit_length_of(:name).from(3).using(@valid_attributes)

Test @validates_length_of :name, :within => 3..40@

Model.should limit_length_of(:name).from(3).to(40).using(@valid_attributes)

Test @validates_numericality_of :age@

Model.should need(:age).to_be_numeric.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) end

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@)

h2. Authors

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

h2. Contributors

  • Chris Lloyd
  • Gareth Townsend
  • Wes Oldenbeuving