0.0
No commit activity in last 3 years
No release in over 3 years
This gem provides RSpec matchers for model attributes and validators.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

 Project Readme

This package helps you check that the attributes and validations of a model have been defined correctly.

Matchers

have_attribute

You may have created a model Store as follows:

class CreateStores < ActiveRecord::Migration
  def change
    create_table :stores do |t|
      t.string :title
      t.string :body, :null => false
      t.string :url, :limit => 1024
      t.boolean :open
    end
  end
end

The have_attribute matcher allows you test each of these attributes as follows:

require 'spec_helper'

describe Store do
  it { should have_attribute(:title) }
  it { should have_attribute(:body).with(:type => :string, :null => false) }
  it { should have_attribute(:url).with(:type => :string, :limit => 1024) }
  it { should have_attribute(:open).with(:type => :boolean) }
end

validate

You may have a model User as follows:

class User < ActiveRecord::Base
  ...
  validates :url, url: true
  ...
end

This matcher allows you to write the following spec:

require 'spec_helper'

describe User do
  it { should validate :url, url: true }
end

validate_inclusion_of

You may have a model User as follows:

class User < ActiveRecord::Base
  ...
  validates_inclusion_of :verified, in: [true, false]
  ...
end

This matcher allows you to write the following spec:

require 'spec_helper'

describe User do
  it { should validate_inclusion_of :verfied, in: [true, false] }
end

validate_length_of

You may have a model Article as follows:

class Article < ActiveRecord::Base
  ...
  validates_length_of :title, maximum: 255
  ...
end

This matcher allows you to write the following spec:

require 'spec_helper'

describe Article do
  it { should validate_length_of :title, maximum: 255 }
end

validate_numericality_of You may have a model User as follows:

class User < ActiveRecord::Base
  ...
  validates_numericality_of :age, greater_than_or_equal_to: 0
  ...
end

This matcher allows you to write the following spec:

require 'spec_helper'

describe User do
  it { should validate_numericality_of :age, greater_than_or_equal_to: 0 }
end

validate_presence_of

You may have a model User as follows:

class User < ActiveRecord::Base
  ...
  validates_presence_of :email
  ...
end

This matcher allows you to write the following spec:

require 'spec_helper'

describe User do
  it { should validate_presence_of :email }
end

validate_uniqueness_of

You may have a model User as follows:

class User < ActiveRecord::Base
  ...
  validates_uniqueness_of :email
  ...
end

This matcher allows you to write the following spec:

require 'spec_helper'

describe User do
  it { should validate_uniqueness_of :email }
end

belong_to

You may have a model User as follows:

class User < ActiveRecord::Base
  ...
  belongs_to :community
  ...
end

This matcher allows you to write the following spec:

require 'spec_helper'

describe User do
  it { should belong_to :community }
end

have_many

You may have a model Blog as follows:

class Blog < ActiveRecord::Base
  ...
  has_many :posts
  ...
end

This matcher allows you to write the following spec:

require 'spec_helper'

describe Blog do
  it { should have_many :posts }
end

have_one

You may have a model Blog as follows:

class Blog < ActiveRecord::Base
  ...
  has_one :author
  ...
end

This matcher allows you to write the following spec:

require 'spec_helper'

describe Blog do
  it { should have_one :author }
end

has_and_belongs_to_many

You may have a model Person as follows:

class Person < ActiveRecord::Base
  ...
  has_and_belongs_to_many :groups, class_name: 'Organization'
  ...
end

This matcher allows you to write the following spec:

require 'spec_helper'

describe Person do
  it { should have_and_belong_to_many :groups, class_name: 'Organization' }
end

Using in Specs

To make these matchers available in your model specs, do the following:

Gemfile

group :test do
  ...
  gem 'specstar-models', '~> 0.2.3'
  ...
end

spec/spec_helper.rb

require 'specstar/models'

RSpec.configure do |config|
  ...
  config.include Specstar::Models::Matchers, :type => :model
  ...
end

Related Tools

You may also want to consider the following gems to help with your specs:

  • specstar-controllers: Matchers for checking that the filters and layouts in a controller have been defined correctly. Learn more here. Released gems are here.
  • specstar-support-random: Utility methods for generating random objects (e.g. URLs, emails, hashes) for use in your specs. Learn more here. Released gems are here.