ruby-on-rails - 最佳实践 : Ruby/Rails Rspec regex testing

标签 ruby-on-rails regex unit-testing ruby-on-rails-3 rspec

你能告诉我如何正确测试正则表达式代码吗?

我使用以下代码测试我的用户登录属性:

# 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/

相关文章:

python - 混合 Web/桌面应用程序 - Ruby on Rails 或 Django on Python?

ruby-on-rails - 在所有延迟的作业之前 Hook

javascript - 寻找对替换方法的更多理解

javascript - 如何获得正则表达式匹配的有效部分

mysql - 导入时主键如何从0开始

ruby-on-rails - 如何在Google Analytics(分析)中跟踪Devise用户注册为转化的过程

regex - 选择字符串结果上的 Powershell Select-Object 与 ForEach

ios - 有效地检查核心数据中是否存在项目

javascript - 如何模拟json数据进行单元测试?

java - 从 Oracle 实例创建内存数据库结构