Лучшая практика: тестирование регулярных выражений Rspec на Ruby / Rails - PullRequest
3 голосов
/ 20 сентября 2010

Не могли бы вы подсказать, как правильно тестировать регулярные выражения?

Я проверяю свой атрибут входа в систему с помощью следующего кода:

# user.rb
class User < ActiveRecord::Base
  #...
  validates_format_of :login, :with => /^[a-zA-z0-9_.]{3,18}$/
end

# user_spec.rb
describe User do
  before(:each) do 
    @user = Factory.build(:user)
    @user.save
  end

  subject { @user }
  it { should be_valid }

  it { should_not allow_value("b lah").for(:login) }
  it { should_not allow_value("bälah").for(:login) }
  it { should_not allow_value("b@lah").for(:login) }
  it { should_not allow_value("bülah").for(:login) }
  it { should_not allow_value("bßlah").for(:login) }
  it { should_not allow_value("b!lah").for(:login) }
  it { should_not allow_value("b%lah").for(:login) }
  it { should_not allow_value("b)lah").for(:login) }
  # ....
  # Shall I test here every special sign????
end

Но это кажется очень избыточным и небезопасным .... Есть ли лучшая практика? Thx!

1 Ответ

6 голосов
/ 20 сентября 2010

Вы действительно не тестируете здесь свою модель, вы тестируете свое регулярное выражение.Это не совсем то же самое.Кроме того, вы тестируете тот же аспект вашего регулярного выражения, что он разрешает только [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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...