RSpec:验证者的共享示例?
RSpec: Shared examples for Validators?
我有几个具有 start_time
和 end_time
的模型,我有一个自定义验证器,它对这些字段有特殊规则。对于测试,我觉得我有 3 个选项:
- 有一个 验证器和 validator_spec。然后重新测试每个模型中验证器的整个实现,以确保验证器正在使用该模型。
- 有一个 验证器和 validator_spec。在每个模型中,以某种方式检查已测试的验证器是否包含在模型中。 (也许这意味着测试一个只有包含验证器才会出现的条件。)
- 创建一个共享示例作为验证器测试,并将其包含在每个模型的测试中(尽管
it_behaves_like SomeValidator
看起来有点奇怪)
有什么想法吗?验证器有几个条件,所以我发现它会征税而不是 DRY 来实施#1。
我会提出另一个选择:
4.) 实现一个 validator_spec 并构建一个自定义匹配器,它可以在使用此验证器的每个模型中重复使用
找到一些灵感
'mockist' 方法是为验证器 class 编写规范,以便可以单独对其进行测试。然后在您的模型规范中,您可以将验证器存根到 return 一个预先确定的值。
这里有一个权衡:您避免了测试数量的组合增加,因此您的测试套件将更小、更快且更易于维护。但是你引入了一个小风险,即在某些情况下,一旦集成到生产代码中,模型可能无法与真实验证器结合使用。
我有几个具有 start_time
和 end_time
的模型,我有一个自定义验证器,它对这些字段有特殊规则。对于测试,我觉得我有 3 个选项:
- 有一个 验证器和 validator_spec。然后重新测试每个模型中验证器的整个实现,以确保验证器正在使用该模型。
- 有一个 验证器和 validator_spec。在每个模型中,以某种方式检查已测试的验证器是否包含在模型中。 (也许这意味着测试一个只有包含验证器才会出现的条件。)
- 创建一个共享示例作为验证器测试,并将其包含在每个模型的测试中(尽管
it_behaves_like SomeValidator
看起来有点奇怪)
有什么想法吗?验证器有几个条件,所以我发现它会征税而不是 DRY 来实施#1。
我会提出另一个选择:
4.) 实现一个 validator_spec 并构建一个自定义匹配器,它可以在使用此验证器的每个模型中重复使用
找到一些灵感'mockist' 方法是为验证器 class 编写规范,以便可以单独对其进行测试。然后在您的模型规范中,您可以将验证器存根到 return 一个预先确定的值。
这里有一个权衡:您避免了测试数量的组合增加,因此您的测试套件将更小、更快且更易于维护。但是你引入了一个小风险,即在某些情况下,一旦集成到生产代码中,模型可能无法与真实验证器结合使用。