应该让投机者犯下令人困惑的错误

时间:2015-01-17 00:40:02

标签: ruby ruby-on-rails-3 shoulda

我认为在将它从v1.4.2更新到v2.7.0之后我认为是应该匹配的宝石有问题,并且失败因我运行测试的方式而异。当我正常运行当前的测试套件时,我会遇到这样的失败:

  

失败/错误:它{should validate_presence_of:attribute1}

     

包含&#34的预期错误不能为空白"当primary_first_name设置为nil时,出现错误:["不能为空(属性:\" attribute2 \",value:nil)","不能为空(属性:\" attribute3 \",值:nil)"]

当发生这种情况时,我尝试设置Spring然后Zeus加速测试(我们使用pre-Spring Rails 3.2.18),这两个都改变了错误输出。上面形式的错误消失了,但这种取代了它:

  

失败/错误:它{should validate_presence_of:attribute}

     

NoMethodError:          未定义的方法`validate_presence_of' for #RSpec :: ExampleGroups ::(Model instance)> (删除开角括号使其显示在此处)

我还发现一堆其他测试开始失败,出现了这种错误:

  

失败/错误:它{should have_db_column:column_name}          期望#<(模型实例>回复has_db_column?

我发现了一个报告discussing后一个问题,但它似乎是一个应该匹配/春天的冲突,所以我不知道为什么宙斯会引起同样的问题。

我不知道第一个问题是否是潜在的或加剧了第二个问题。所有这三个宝石对我来说都是新手(我正在研究遗留代码),所以我的后备修复方法就是摆脱了应该匹配的问题(我将其更新为对它似乎造成的另一个问题的响应)和重写依赖它的测试。是否有一个不太激烈的选择?

1 个答案:

答案 0 :(得分:1)

它的一部分可能是您的测试设置中的错误(在规范中)&然后如何构建模型以通过测试。模型应该有一个validates组件,它响应测试。

让我们看看你错误的这一部分:

  

失败/错误:它{should validate_presence_of:attribute1}

     

当primary_first_name设置为nil时,包含“不能为空”的预期错误,...

告诉我您在attribute1存在的规范中创建了一个shoulda验证,然后您需要在模型中验证attribute1

presence

然后你有收到的错误:

  

出错:[“不能为空(属性:\”attribute2 \“,值:nil)”,“不能为空(属性:\”attribute3 \“,值:nil)”] < / p>

多个错误,对于在哈希中传入的属性,只需要1个属性。

不知道你的规格是什么?模型看起来像,我只能假设,但这是我写的方式:

规格:

it { is_expected_to validate_presence_of(:attribute1) }

然后,您的模型将具有对应的验证,以匹配它:

validates :attribute1, presence: true