Bvu*_*Ic7 3 regex unit-testing rspec ruby-on-rails ruby-on-rails-3
你能告诉我如何正确测试正则表达式代码吗?
我使用以下代码测试我的用户登录属性:
# 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
Run Code Online (Sandbox Code Playgroud)
但它似乎非常多余而且不安全......是否有最好的做法?谢谢!
你真的没有在这里测试你的模型,你正在测试你的正则表达式.这不是一回事.此外,您正在测试正则表达式的相同方面,它只允许[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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1852 次 |
| 最近记录: |