Закрытое исключение вызова метода для ActionView - PullRequest
0 голосов
/ 01 августа 2009

У меня не работает функциональный набор тестов в приложении Rails 2.2.2. Выдается исключение, и связанные строки находятся ниже:

ActionView :: TemplateError: Попытка вызова частного метода

В строке # 55 приложения / 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) %>

Этот код работает должным образом в любой другой среде, кроме test; более того, activity является просто экземпляром ActiveRecord с именем Activity, а context является столбцом varchar в таблице activities. Я не перегружаю геттер или сеттер для context в модели. Это настолько же ванильно, насколько вы можете получить.

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

1 Ответ

2 голосов
/ 01 августа 2009

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

Вы пытались переименовать атрибут context во что-то еще?

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

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

# in activity.rb
def context
  read_attribute(:context)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...