Skip to content

Latest commit

 

History

History
84 lines (45 loc) · 2.31 KB

File metadata and controls

84 lines (45 loc) · 2.31 KB

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.

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

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)

Authors

Copyright © 2007 Pat Allan & James Healy, released under the MIT license

Contributors

  • Chris Lloyd
  • Gareth Townsend
  • Wes Oldenbeuving