2009-05-25 8 views
0

Ich habe das Gefühl, ich mache nur etwas syntaktisch falsch, aber es ist überraschend schwierig, Google "GET", so dass ich hoffte, jemand hier könnte die Antwort darauf wissen.Testen GET in einem Schienen-Controller

Ich versuche, einen Rails-Controller aus einem RSpec-Test zu testen. Ich folge einem Beispiel, das ich hier gefunden habe - http://www.elevatedrails.com/articles/2007/09/10/testing-controllers-with-rspec/, aber ich bin auf der tatsächlichen Ausführung der Methode stecken, die ich gerade teste.

Ich mache eine GET-Anfrage, wo der Post oben einen POST macht. Ich übergebe 2 Parameter Hersteller und Modell.

Meine URL wird idealerweise in etwa so aussieht http://mysite.com/Products/index/Manufacturer/ModelName

Ich kann nicht die Syntax für den Erhaltungs-Anforderungs-Aufruf in dem Rest herauszufinden. Im Moment habe ich

get :index, :manufacturer=>@manufacturer, :modelName=>@modelName 

und ich zurück

Argument in 'Product Finden Sie ein gültiges Produkt sollte das Produkt abrufen' falsche Anzahl von Argumenten (0 für 2)

Irgendwelche Gedanken?

edit: Es sollte @manufacturer und @modelName sind definiert in vor zu beachten, (: each)

+0

Die Syntax ist in Ordnung. Etwas anderes ist wackelig. Posten Sie mehr Details! Poste ein paar Zeilen deines Fehler-Backtrace, poste deine gesamte fehlerhafte Spezifikation, poste den relevanten Teil deines Controllers und poste die relevanten Routen. :) –

+0

Auch als eine Notiz, es sieht aus wie Sie ein paar Rails Konventionen nicht gehorchen, die Ihr Leben härter als einfacher machen könnte. modelName sollte model_name sein und ProductController sollte wahrscheinlich ProductsController plural sein. –

+0

Auch sollten Sie wahrscheinlich die Großbuchstaben in der URL verlieren, auch warum würden Sie eine Liste der Hersteller eines Index für Produkte verschachteln. Sicherlich würde das besser funktionieren/Produkte/Hersteller, und da dies viele sein würden, haben Sie auch ausgeschlossen/Hersteller/Produkte? Aber wie bereits erwähnt, wird Code benötigt, um auf das Ende Ihres Problems zu kommen. – nitecoder

Antwort

1

Als ich diesen Verdacht war ich grün Programmierung zu den Schienen zu sein.

I wurde die Definition der Controller-Methode als

def index(manufacturer, modelName) 

Wenn ich wirklich die params Hash verwenden benötigt, um die Attribute zugreifen. Ich musste dann eine benutzerdefinierte Route definieren, da die ID der einzige Parameter ist, von dem erwartet wird, dass er standardmäßig an eine Controller-Methode übergeben wird.

einmal tat ich, dass ich die spec

get :index, {:manufacturer=>@manufacturer, :modelName=>@modelName} 

zu lesen geändert und es funktionierte.

Danke für die Kommentare an alle.

Verwandte Themen