RSpec:Validators的共享示例?

时间:2015-06-02 18:02:12

标签: ruby-on-rails rspec

我有几个拥有start_timeend_time的模型,我有一个自定义验证器,它对这些字段有特殊规则。为了测试,我觉得我有3个选择:

  1. 拥有验证程序和validator_spec 。然后重新测试每个模型中验证器的整个实现,以确保验证器正在使用该模型。
  2. 拥有验证程序和validator_spec 。在每个模型中,以某种方式检查已经测试的验证器是否包含在模型中。 (也许这意味着测试一个只会包含验证器的条件。)
  3. 创建共享示例作为验证程序测试,并将其包含在每个模型的测试中(虽然it_behaves_like SomeValidator看起来很奇怪)
  4. 有什么想法?验证器有几个条件,所以我发现它是税,而不是DRY来实现#1。

2 个答案:

答案 0 :(得分:0)

我会提出另一种选择:

4。)实现validator_spec并构建一个自定义匹配器,可以使用此验证器在每个模型中重用

也许你可以在https://github.com/thoughtbot/shoulda-matchers

找到一些灵感

答案 1 :(得分:0)

'mockist'方法是为验证器类编写一个规范,以便可以单独测试它。然后在您的模型规范中,您可以存根验证器以返回预定值。

这里有一个权衡:您避免了测试数量的组合增加,因此您的测试套件将更小,更快,更易于维护。但是,您引入了一个小风险,在某些情况下,一旦模型生成代码中的某个模型可能无法与实际验证器结合使用。