你能告诉我如何正确测试正则表达式代码吗?
我使用以下代码测试我的用户登录属性:
# 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
但它似乎非常多余且不安全......有最佳实践吗?谢谢!
最佳答案
您并不是在这里真正测试您的模型,而是在测试您的正则表达式。这不是一回事。此外,您正在测试正则表达式的同一方面,它一次又一次地只允许 [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
关于ruby-on-rails - 最佳实践 : Ruby/Rails Rspec regex testing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3753609/