Например, я хотел бы подтвердить, что это имя только буквы и от 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
Так что определенно работает Великий. Но это слишком многословно, также я не могу быть уверен, что мой тест на самом деле проверяет все символы и их комбинации, возможные и все длины и прочее, хотя я уверен, что он работает так, как ожидалось.
Итак, что приемлемый способ проверить мою проверку, не будучи слишком перфекционистом, но оставив большую часть тестируемой логики?
Я просто настроен на то, чтобы написать идеальный код, чтобы написать идеальный код и забыть о главной цели: рабочий продукт?
Ну, я младший разработчик, но даже с такими проверками я действительно пропустил какую-то ошибку в своем регулярном выражении: я забыл поставить начальную и конечную точки, так что имя «Джон1» было бы действительно, поэтому тест помог мне здесь. Однако, как вы сказали, все еще хромой xD – konnigun
@ Konnigun Я действительно не сказал бы, что они «хромые». В частности, когда вы не уверены, лучше ошибиться на стороне осторожности. Стоимость (относительно) низкая. –