2009-07-31 12 views
0

Ich habe eine funktionale Testsuite, die in einer Rails 2.2.2-Anwendung fehlschlägt. Die Ausnahme wird ausgelöst, und die damit verbundenen Linien sind unter:Private Methodenaufruf-Ausnahme für 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) %> 

Dieser Code funktioniert wie in jeder anderen Umgebung neben Test erwartet; Außerdem ist activity lediglich eine Instanz eines ActiveRecord namens Activity und context ist eine varchar-Spalte innerhalb der activities-Tabelle. Ich bin nicht Überlastung der Getter oder Setter für context im Modell. Es ist ungefähr so ​​Vanille, wie Sie bekommen können.

Ich bin verwirrt - ich habe noch nie zuvor gesehen, und alle Versuche, die Ursache zu isolieren haben sich als sinnlos erwiesen, wie Google-Suchen.

Antwort

2

Es klingt wie die Methode context in der Testumgebung überschrieben wird. Es kann etwas sein, das nur beim Testen verwendet wird (z. B. ein Spott-Framework). Oder die Ladereihenfolge kann bei den Tests anders sein, was dazu führt, dass nach dem Laden des Modells ein Plugin oder eine Lib hinzugefügt wird.

Haben Sie versucht, das Attribut context in etwas anderes umzubenennen?

Aktualisieren: Verwenden Sie Shoulda im Test? Das würde das Problem erklären. Ich glaube, das definiert eine context-Methode für Object, die bewirkt, dass Ihr Activity-Modell diese erbt. ActiveRecord definiert die Spalten-Accessor-Methoden träge (durch fehlende Methode), die nie ausgelöst wird, weil die Methode bereits definiert ist. Ich schlage vor, das Attribut umzubenennen.

Alternativ können Sie die Kontextmethode manuell definieren.

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

Ryan Bates ist endlich da .. Großartig! Freue mich wirklich auf weitere Antworten von Ihnen. Danke, Swanand – Swanand

+0

große, großartige Antwort und scheint genau zu sein. ich dachte nicht einmal daran zu denken, dass shofa es verursacht hat. Ich werde versuchen, Kontext explizit im Modell zu definieren. Vielen Dank! – Kyle

Verwandte Themen