Вы действительно не тестируете здесь свою модель, вы тестируете свое регулярное выражение.Это не совсем то же самое.Кроме того, вы тестируете тот же аспект вашего регулярного выражения, что он разрешает только [a-zA-z0-9_.], Снова и снова.Если вы хотите применить разные тесты, протестируйте разные аспекты, например, с помощью «lo» (<3 символа) или «12345678901234567890» (> 18 символов).
Кроме того, если вы хотите высушить егоможет сделать что-то вроде
invalid_logins = ["b lah","bälah","b@lah","bülah","bßlah","b!lah","b%lah","b)lah"]
invalid_logins.each do |s|
it { should_not allow_value(s).for(:login) }
end