如何测试模型属性的验证是否有效?

时间:2016-08-01 01:58:57

标签: ruby-on-rails rspec

我对模型属性进行了验证,该属性仅允许使用字母数字字符(仅限字母和数字)。

如何在不担心其他验证的情况下测试此专栏?

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

有没有办法隔离这个属性的测试?

1 个答案:

答案 0 :(得分:0)

在测试format时,您可以使用allow_values中的Shoulda Matchers gem;我认为您必须提供一些有代表性的测试用例以确保允许某些值,而其他值则不允许:

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

对于唯一性,您可以使用validates_uniqueness_of中的Shoulda Matchers gem