例如,我想验证名称只是字母并且长度在 4 到 14 个字母之间。我在模型中有以下代码:
validates: name, :format => { :with => /^[a-zA-Z]+$/,
:message => 'Name should be letters only. },
:length => { :minimum => 4, :maximum => 14 }
所以它显然让我做我想做的事。
但至于单元测试,我有点过于完美主义,所以我设置了类似的东西
invalid_names = ['1234',
'qwe',
'1%#$#$',
'Sam1',
'%',
random_string(15)] #I also have a test method to create random string with parametrized length
valid_names = %w['test',
'Travis',
'John',
random_string(5),
random_string(14),
random_string(4)]
并使用断言在循环中测试它们中的每一个,例如
invalid_names.each do |name|
user = User.new(:name => name)
user.save
assert user.errors[:name].any?, "#{name} is valid."
end
所以它肯定工作得很好。但这太冗长了,我也不能确定我的测试实际上测试了所有可能的符号及其组合以及所有长度和东西,即使我确信它按预期工作。
那么,什么是可以接受的测试我的验证的方法,而不是过于完美主义者,但又要对大部分逻辑进行测试?
我是否只是想编写一个完美的代码只是为了编写一个完美的代码而忘记了主要的完成目标:工作产品?