2009-07-31 3 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 под названием Activity, а context является столбцом varchar в таблице activities. Я не перегрузка геттера или сеттера для context в модели. Это как ваниль, как вы можете получить.

Я сбитый с толку. Я никогда не видел этого раньше, и все попытки изолировать причину оказались тщетными, как и поиски Google.

ответ

2

Звучит так, как метод context переопределяется в тестовой среде. Это может быть что-то, что используется только при тестировании (например, насмешливая структура). Или порядок загрузки может отличаться при тестировании, в результате чего плагин или lib будут включены после загрузки вашей модели.

Вы пробовали переименовать атрибут context в нечто другое?

Обновление: Используете ли вы в тестах Shoulda? Это объясняет проблему. Я считаю, что это определяет метод context объекта, заставляющий вашу модель Activity наследовать это. ActiveRecord определяет методы доступа столбца лениво (через метод отсутствует), который никогда не запускается, потому что метод уже определен. Я предлагаю переименовать атрибут.

В качестве альтернативы вы можете определить метод контекста вручную.

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

Райан Бейтс, наконец, здесь .. Отлично! Надеемся, что вы получите больше ответов от вас. Спасибо, Swanand – Swanand

+0

отличный, отличный ответ, и кажется, что это место. я даже не подумал думать, что это должно было вызвать его. Я попытаюсь определить контекст явно в модели. благодаря! – Kyle

Смежные вопросы