检查nil值自定义方法

时间:2014-10-08 07:35:42

标签: ruby-on-rails ruby regex ruby-on-rails-4 rspec

我有一个自定义方法来检查regexp的值,但我还想检查一个nil值,但我不确定我是否检查第一个子句中的两个实例。我需要两个不同的错误消息,具体取决于它是零还是不匹配:

def format_mobile
 regexp = /^(07[\d]{9})$/
  if !(regexp.match(mobile_no))
   errors[:base] << "Please check your Mobile Number"
 elsif mobile_no.blank? // also tried mobile_no == nil
  errors[:base] << "Please provide your Mobile Number"
 end
end

Rspec测试

通行证

 it 'is invalid with a Invalid mobile number (Company)' do
  user = FactoryGirl.build(:user, company_form: true, mobile_no: '0780')
  user.format_mobile
  expect(user.errors[:base]).to include("Please check your Mobile Number")
end

失败

it 'is invalid with a NIL mobile number (Company)' do
 user = FactoryGirl.build(:user, company_form: true, mobile_no: :nil)
 user.format_mobile
 expect(user.errors[:base]).to include("Please provide your Mobile Number")
end

有人能用我的自定义方法指出我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

问题在于您的检查顺序。 nil与正则表达式不匹配,这就是为什么你永远不会进入第二个elsif。只需更改顺序:

def format_mobile
 regexp = /^(07[\d]{9})$/
 if mobile_no.blank? # also tried mobile_no == nil
   errors[:base] << "Please provide your Mobile Number"
 elsif !(regexp.match(mobile_no))
   errors[:base] << "Please check your Mobile Number"
 end
end

希望它有所帮助。