如何测试自定义验证器? [英] How to test a custom validator?
本文介绍了如何测试自定义验证器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下验证器:
# Source: http://guides.rubyonrails.org/active_record_validations_callbacks.html#custom-validators
# app/validators/email_validator.rb
class EmailValidator < ActiveModel::EachValidator
def validate_each(object, attribute, value)
unless value =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
object.errors[attribute] << (options[:message] || "is not formatted properly")
end
end
end
我希望能够在我的 lib 目录中的 RSpec 中对此进行测试.到目前为止的问题是我不确定如何初始化 EachValidator
.
I would like to be able to test this in RSpec inside of my lib directory. The problem so far is I am not sure how to initialize an EachValidator
.
推荐答案
这是我为该文件编写的快速规范,它运行良好.我认为可能会清理存根,但希望这足以让您开始.
Here's a quick spec I knocked up for that file and it works well. I think the stubbing could probably be cleaned up, but hopefully this will be enough to get you started.
require 'spec_helper'
describe 'EmailValidator' do
before(:each) do
@validator = EmailValidator.new({:attributes => {}})
@mock = mock('model')
@mock.stub('errors').and_return([])
@mock.errors.stub('[]').and_return({})
@mock.errors[].stub('<<')
end
it 'should validate valid address' do
@mock.should_not_receive('errors')
@validator.validate_each(@mock, 'email', 'test@test.com')
end
it 'should validate invalid address' do
@mock.errors[].should_receive('<<')
@validator.validate_each(@mock, 'email', 'notvalid')
end
end
这篇关于如何测试自定义验证器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文