【问题标题】:rspec - how to check that allow_blank existsrspec - 如何检查 allow_blank 是否存在
【发布时间】:2012-07-09 23:08:48
【问题描述】:

我有一个有效的唯一性测试:

it { should validate_uniqueness_of(:name).case_insensitive }

但是,当我尝试对名称进行类似测试时,它失败了

it { should validate_presence_of(:name).allow_blank }    

我收到此错误:undefined methodallow_blank'`

【问题讨论】:

    标签: ruby-on-rails ruby validation activerecord rspec


    【解决方案1】:

    根据this list,应该没有可以链接到 validate_presence_of 的方法来支持您想要做的事情。 看看the source code of the matcher here

    但是,您可以使用另一个匹配器:

    it { should allow_value("", nil).for(:name) }
    

    测试是否可以将空白值应用于您的属性。

    完整的测试将是

    it { should validate_presence_of(:name) }    
    it { should allow_value("", nil).for(:name) }
    

    【讨论】:

    • 没有allow_blank匹配器:#<:matchers::activemodel::validatepresenceofmatcher..>的未定义方法`allow_blank'
    • @PETERBROWN 我看到我从问题中复制了 .allow_blank 方法。编辑了,所以现在应该是正确的。
    • 这不再起作用了,因为validate_presence_of 预计空格会失败。 ://
    【解决方案2】:

    AFAIK,allow_blank 没有匹配器,因此您可以使用 allow_value(@subject.name.blank?) 或类似的东西。

    附带说明,我从不使用验证方法本身测试模型验证,因为您实际上是在测试错误的东西。我使用相关模型的创建来测试它们,并传递有效或无效的参数。这将在真实条件下更准确地测试模型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      • 2021-06-25
      • 2014-05-14
      • 2011-08-23
      相关资源
      最近更新 更多