我有以下验证器:
#来源:http://guides.rubyonrails.org/active_record_validations_callbacks.html#custom-验证器
#app/validators/email_validator.rb
类电子邮件验证程序<;ActiveModel::EachValidator
def validate_每个(对象、属性、值)
除非值=~/^([^@\s]+)@((?:[-a-z0-9]+\)+[a-z]{2,})$/i
object.errors[属性]<&书信电报;(选项[:消息]| |“格式不正确”)
终止
终止
终止
我希望能够在我的lib目录中的RSpec中测试这一点。到目前为止的问题是,我不确定如何初始化每个验证程序
我不太喜欢另一种方法,因为它将测试与实现联系得太近了。而且,这很难理解。这是我最终使用的方法。请记住,这是对我的验证器实际操作的严重过度简化。。。只是想更简单地演示一下。肯定要进行优化
类OmniauthValidator<;ActiveModel::验证器
def验证(记录)
如果record.omniauth\u provider.nil&&;!%w(facebook github).include?(record.omniauth_provider)
record.errors[:omniauth\u provider]<<;'omniauth提供程序“”无效
终止
终止
终止
相关规范:
需要“spec\u helper”
类可验证
包括ActiveModel::验证
使用OmniauthValidator验证_
属性访问器:omniauth\u提供程序
终止
描述OmniauthValidator所做的工作
主题{validable.new}
上下文“不带提供程序”do
它“有效”吗
期望(主题)有效
终止
终止
上下文“具有有效提供程序”do
它“有效”吗
subject.stubs(omniauth_提供者:“facebook”)
期望(主题)有效
终止
终止
上下文“具有未使用的提供程序”do
它“无效”吗
subject.stubs(omniauth_提供者:“twitter”)
期望(主题)。无效
期望(subject).在(:omniauth\u provider)上有(1).error\u
终止
终止
终止
基本上,我的方法是创建一个伪对象“validable”,这样我们就可以实际测试它的结果,而不是对实现的每个部分都有期望