2015-07-20 99 views
0

我想測試我的模型,但我能找到的所有信息似乎都過時了。我的目標是測試每個單獨的驗證。 我的模型:Rails - FactoryGirl - 測試模型[驗證]

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定義:

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(:作者,名稱: '樂')]返回哈希,而不是布爾值。那麼現在,我應該如何測試它?我應該使用什麼匹配器?

+0

您可以自己發佈一個正式答覆,然後選擇這個問題進行回答,這樣很容易看到別人的問題已經回答了:) – sourcx

+0

感謝提示:)我」我剛剛做到了 – mike927

回答

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