【问题标题】:How to test regexes validation through RSPEC?如何通过 RSPEC 测试正则表达式验证?
【发布时间】:2017-05-23 16:58:39
【问题描述】:

这是带有验证的消费者类

class Consumer < ActiveRecord::Base

    validates :email, format: { with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i, on: :create, message: 'invalid email format'}, length: { maximum: 256 }

这是我用来测试消费者的电子邮件格式是否有效但我收到错误的方法。除了这种方法,还有更好的方法来测试正则表达式吗?

it 'email with invalid format is invalid' do
consumer = Consumer.new(email: 'bugs', password: '12345')
consumer.valid?
consumer.errors.full_messages
expect(consumer.errors.get(:email)).to eq(['email is not valid'])
 end


it 'has no errors for valid email format' do
consumer = Consumer.new(email: 'bugs@disney.com', password: '12345')
consumer.valid?
consumer.errors.full_messages
expect(consumer.errors.get(:email)).to be_nil
end

【问题讨论】:

    标签: ruby-on-rails validation rspec


    【解决方案1】:

    如果您保证 Consumer 对象的所有其他值均有效,则可以简化测试。

    例如,假设您的Customeremailpasswordnamelast_name;那么你可以这样测试:

    it 'email with invalid format is invalid' do
      consumer = Consumer.new(email: 'bugs', password: '12345', name: 'John', last_name: 'Doe')
      expect(consumer.valid?).to be(false)
    end
    

    在这个例子中,所有属性都是正确的,除了email,所以只要检查valid?是否返回false就足够了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-15
      • 2015-06-17
      • 2012-01-08
      • 2016-06-30
      • 2015-04-20
      • 1970-01-01
      • 2014-09-18
      相关资源
      最近更新 更多