2009-07-31 38 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