RSpec:验证者的共享示例?

RSpec: Shared examples for Validators?

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

  1. 有一个 验证器和 validator_spec。然后重新测试每个模型中验证器的整个实现,以确保验证器正在使用该模型。
  2. 有一个 验证器和 validator_spec。在每个模型中,以某种方式检查已测试的验证器是否包含在模型中。 (也许这意味着测试一个只有包含验证器才会出现的条件。)
  3. 创建一个共享示例作为验证器测试,并将其包含在每个模型的测试中(尽管it_behaves_like SomeValidator看起来有点奇怪)

有什么想法吗?验证器有几个条件,所以我发现它会征税而不是 DRY 来实施#1。

我会提出另一个选择:

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

或许您可以在 https://github.com/thoughtbot/shoulda-matchers

找到一些灵感

'mockist' 方法是为验证器 class 编写规范,以便可以单独对其进行测试。然后在您的模型规范中,您可以将验证器存根到 return 一个预先确定的值。

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