2017-05-23 45 views
0

這是消費類驗證如何通過RSPEC測試正則表達式驗證?

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: '[email protected]', password: '12345') 
consumer.valid? 
consumer.errors.full_messages 
expect(consumer.errors.get(:email)).to be_nil 
end 

回答

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就足夠了。

+0

非常感謝你的幫助@Gerry – mm24mm