たとえば、名前が文字のみで、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
だから、それは間違いなくうまく機能します。しかし、それは冗長すぎます。また、期待どおりに機能することは間違いありませんが、テストが実際にすべてのシンボルとその組み合わせ、すべての長さなどを実際にテストするかどうかはわかりません。
では、完璧主義になりすぎずに、ロジックの大部分をテストしたままにして、検証をテストするための受け入れ可能な方法は何ですか?
完璧なコードを書くためだけに完璧なコードを書こうとして、主な最終目標である実用的な製品を忘れるというマインドトリックに陥っているだけですか?