2016-08-01 14 views
1

英数字(文字と数字のみ)を許可するモデル属性で検証しました。モデル属性の検証をテストするにはどうすればよいですか?

他の検証について心配することなく、この列だけをテストするにはどうすればよいですか?

validates :url, uniqueness: true, format: { with: /[^0-9a-z]/i, 
    message: "Alphanumeric characters only." } 

ちょうどこの属性のテストを分離する方法はありますか?

答えて

0

formatをテストする場合、Shoulda Matchers gemallow_valuesを使用できます。私はあなたが特定の値が許可されることを保証するためにいくつかの代表的なテストケースを提供しなければならないと思うし、他の人はそうではありません。

describe 'validations' do 
    describe 'for url' do 
    let(:valid_urls) do 
     ['Valid', 'URL', '3x4mp1e5'] 
    end 

    let(:invalid_urls) do 
     ['!nvalid', '|_|rl', 'example$'] 
    end 

    it 'allows valid URLs' do 
     expect(your_object).to allow_values(*valid_urls).for(:url) 
    end 

    it 'does not allow invalid URLs' do 
     expect(your_object).not_to allow_values(*invalid_urls).for(:url) 
     .with_message("Alphanumeric characters only.") 
    end 
    end 
end 

独自性のために、あなたはShoulda Matchers gemからvalidates_uniqueness_ofを使用することができます。

+0

ここでは、shoulda-matcherは必須ではないことを指摘しておきますが、仕様を少し簡潔にするだけです。 –

+0

@AndyWaite、はい、それは真実です、故意に "あなたは_使用することができました..."と言います。 –

関連する問題