2014-06-17 25 views
11

我最近升級從RSpec的2.99 RSpec的3.這將是我的規格之一:如何將errors_on轉換爲RSpec 3語法?

require 'spec_helper' 

    describe User, :type => :model do 

    it "is invalid without a password" do 
     expect(FactoryGirl.build(:user, :password => nil).errors_on(:password).size).to eq(1)  
    end 

    end 

end 

我已經跑了是應該我的大部分規格都轉換爲RSpec的3語法Transpec寶石。不過,我仍然得到這個錯誤(和其他幾個人):

Failure/Error: expect(FactoryGirl.build(:user, :password => nil).errors_on(:password).size).to eq(1) 
NoMethodError: 
    undefined method `errors_on' for #<User:0x00000108beaba0> 

我試圖重新寫在許多不同的方式測試,但是誤差不會消失。

任何人都可以幫忙嗎?

回答

10

如果你不希望捆綁其他寶石,你可以在測試對象調用valid?然後訪問errors陣列:

require 'spec_helper' 

describe User, :type => :model do 

    it "is invalid without a password" do 
    user = FactoryGirl.build(:user, :password => nil) 
    user.valid? 
    expect(user.errors[:password].size).to eq(1) 
    end 

end 
0

一個簡單的方法是:

it "is not valid without a correct email format" do 
    user.email = 'user-email.com' 
    user.valid? 

    expect(errors_from session_form, :email).to include('is invalid') 
end 

def errors_from(record, attr) 
    record.errors[attr].to_sentence 
end 
相關問題