2012-03-14 46 views
0

tl; dr驗證在瀏覽器中運行,但rspec失敗。我不知道爲什麼。導軌驗證中的自定義方法

回答:我試圖批量分配user_id,但user_id不是可以批量分配的。在控制器中正確構建它,在rspec中不正確。

這是我的上市模式。每個列表都有一個價格和與其相關的user_id。

在我的「上市」模式中,我有「價格」。

在我的「用戶」模型中,我有一個名爲「vip」的布爾屬性。

「價格」的最大值取決於用戶的VIP狀態。如果VIP,最高價格是400.否則,最高價格是200.

我寫了一個方法「listing_ceiling」,應根據用戶的VIP性能返回正確的最大值。

它可以在瀏覽器中,但是當我通過我的測試運行,RSpec的回來與錯誤:

undefined method `vip?' for nil:NilClass 

我不完全知道在那裏我愛上短這裏。它在瀏覽器中正常工作,但在使用rspec進行測試時失敗。這裏的代碼:

validates_numericality_of :price, :presence => true, :greater_than => 10, :less_than => :listing_ceiling 

def listing_ceiling 
    if self.user.vip? 
     400.01 
    else 
     200.01 
    end 
end 

任何想法,爲什麼它會這樣失敗?

+0

當rspec運行時,它使用測試數據庫。你確定你有用戶嗎? – Kyle 2012-03-14 03:27:44

回答

1

Listing#user返回nil。可能有兩個問題。

  1. 您的列表沒有用戶。即所涉及的Listing的外鍵user_idnil。 OR
  2. 您的列表user_id列。但是沒有User與該ID。

解決方法是將用戶分配到您的列表。

+0

關閉。我手動分配user_id,但user_id不是可以批量分配的。因此,沒有用戶! – 2012-03-14 16:38:13

1

你應該檢查你的RSpec,問題不在於你的cutom驗證方法,而是在你的測試設置中。由於錯誤消息指出user == nil

+0

賓果。模型中的方法是正確的,當然這可以在瀏覽器中使用。 問題出在rspec上,就像你說的。 我試圖手動分配user_id,但它不是可以分配的。 – 2012-03-14 16:36:00