dimanche 19 juillet 2015

Rails - FactoryGirl - test models [validation]

I would like to test my models but all informations that I could find seems to be outdated. My goal is to test each individual validation. My model:

class Author < ActiveRecord::Base
  has_and_belongs_to_many :books
  before_save :capitalize_names
  validates :name, :surname, presence: true, length: { minimum: 3 },
  format: { with: /[a-zA-Z]/ }


  private
  def capitalize_names
    self.name.capitalize!
    self.surname.capitalize!
  end
end

and my factorygirl define:

FactoryGirl.define do
  factory :author do |f|
    f.name { Faker::Name.first_name }
    f.surname { Faker::Name.last_name }
  end
end

So now, I want to test whether name is not shorter than 3 characters.

My context:

  context 'when first name is too short' do
    it { expect( FactoryGirl.build(:author, name: 'Le')).to 
      be_falsey }
    end

I know it's invalid because of [FactoryGirl.build(:author, name: 'Le')] returns hash instead of boolean value. So now, how should I test it? What matcher should I use?

[SOLVED]

Use be_valid instead of be_falsey. Now it should look like :

  context 'when first name is too short' do
    it { expect( FactoryGirl.build(:author, name: 'Le')).not_to
    be_valid }
  end

Aucun commentaire:

Enregistrer un commentaire