Rails - FactoryGirl - 测试模型[验证]

时间:2015-07-20 05:55:34

标签: ruby-on-rails validation testing factory-bot faker

我想测试我的模型,但我能找到的所有信息似乎已经过时了。我的目标是测试每个单独的验证。 我的模特:

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

和我的女工定义:

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

现在,我想测试名称是否不短于3个字符。

我的背景:

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

我知道它因为[FactoryGirl.build(:作者,名称:&#39; Le&#39;)]而无效,因此返回哈希而不是布尔值。那么现在,我该如何测试呢?我应该使用什么匹配器?

1 个答案:

答案 0 :(得分:1)

[解决]

使用be_valid而不是be_falsey。现在看起来应该是这样的:

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