2015-09-19 41 views
0
describe User do 

    it { should belong_to(:shop) } 


    it { should respond_to(:shop) } 
    it { should respond_to (:first_name)} 
    it { should respond_to (:last_name)} 
    it { should respond_to (:email)} 

工作正常。但只要我補充一下:Rails&Shoulda Spec Matcher:validate_presence_of(:first_name)吹起來

it { should validate_presence_of (:first_name)} 
it { should validate_presence_of (:last_name)} 

它打破,特別是在這個回調方法:

def get_url 
    source = "http://www.randomsite.com/"+ first_name + "+" + last_name 
end 

的零的隱式轉換成字符串+

我如何解決這個問題?

回答

0

看起來像你的first_namelast_namenil爲測試。 嘗試存根在before塊這樣的值:

context 'first_name and last_name validation' do 
    before do 
    allow(subject).to receive(:first_name).and_return('bob') 
    allow(subject).to receive(:last_name).and_return('tom') 
    end 

    it { should validate_presence_of (:first_name)} 
    it { should validate_presence_of (:last_name)} 
end 
0

那麼,這是怎麼validate_presence_of(:first_name)作品:

  1. 它指定nil到模型的first_name屬性,並在模型調用.valid?
  2. 如果.valid?返回true - 測試失敗,因爲如果您有正確的驗證,則不會發生。

我認爲get_url方法設置爲在before_validation回調運行,那麼,什麼是在你的代碼怎麼回事:

  1. first_name被分配給nil
  2. .valid?被調用。
  3. before_validation回調觸發您get_url方法
  4. 一切都吹起來,因爲get_url不進入帳戶first_name可以nil
相關問題