2009-07-31 65 views
0

我有一個功能測試套件在Rails 2.2.2應用程序中失敗。拋出的異常,以及相關聯的線是以下:ActionView的私有方法調用異常

ActionView::TemplateError: Attempt to call private method

On line #55 of app/views/wine/view.html.erb

53:  <% for activity in @activities %> 
54:  
55:  <% if activity.context == 'ItemComment' %> 
56:  <%= render :partial => 'item_comments/comment', :object => ItemComment.find(activity.context_id) %> 
57:  <% elsif activity.context == 'Review' %> 
58:  <%= render :partial => 'reviews/review', :object => Review.find(activity.context_id) %> 

如預期在除了測試每個其他環境此代碼功能;而且activity僅僅是一個ActiveRecord稱爲活動的一個實例,並且contextactivities表內的varchar列。我是而不是在模型中重載了context的getter或setter。它就像您可以得到的香草一樣。

我困惑 - 我從來沒有見過這一點,所有的嘗試都以事業隔離已經證明是徒勞的,因爲有谷歌搜索。

回答

2

聽起來context在測試環境中覆蓋的方法。它可能只是用於測試的東西(比如模擬框架)。或者在加載模型後導致插件或庫包含在測試中的加載順序可能會有所不同。

您是否嘗試過重新命名context屬性到別的東西?

更新:你在測試中使用早該?這將解釋這個問題。我相信這會在Object上定義一個context方法,導致您的Activity模型繼承此方法。 ActiveRecord懶惰地定義列訪問器方法(通過缺少方法),因爲方法已經定義,所以永遠不會被觸發。我建議重命名屬性。

或者,也可以手動定義上下文方法。

# in activity.rb 
def context 
    read_attribute(:context) 
end 
+0

瑞恩貝茨終於來了..太棒了!真的很期待您提供更多的答案。 謝謝, Swanand – Swanand 2009-08-01 05:27:46