2010-12-16 17 views
6

Ich möchte eine Abfrage in rspec erstellen.rufen Sie eine bestimmte URL mit rspec

get :exec, {:query=>"bla", 
     :id => "something", 
     :user_id => "user" 
    } 

Dies baut eine URL wie: /user/query/something/exec?query=bla

Die Sache ist die, dass mein Controller die Anforderung überprüft er bekommt und die URL aussehen muss: /user/query/something/_XXX_/exec?query=bla

Wie kann so ich etwas in rspec? (Der XXX ist fest in der Datei routes.rb codiert.)

+0

Ich nahm mir die Freiheit, das Ruby-on-Rails-Tag hinzuzufügen. Wenn das ein Fehler war, werden wir es entfernen. –

Antwort

16

Ich nehme an, Sie beziehen sich auf eine Controller-Spezifikation.

Wenn Sie einen Hash wie in Ihrem Beispiel übergeben, werden die Schlüssel mit den Variablen in Ihren Routen verglichen. Für jeden Schlüssel, der nicht mit der Route übereinstimmt, wird das Schlüssel/Wert-Paar als Abfragezeichenfolge angefügt.

Beispiel: Angenommen, Sie diese haben in der Spec:

get :exec, :query => 'foo', :id => '1', :user_id => 42 

Und Sie haben diese in die Routenberechnung (Rails 3-Stil):

match '/exec/:user_id/:id' => 'whatever#exec' 

Die Spezifikation wird dann in dem Schlüssel ersetzen/Wertepaare, die Sie angegeben haben, und simulieren Sie eine Anfrage mit folgendem Pfad:

/exec/42/1?query=foo 

So, um Ihre s zu verkabeln Stellen Sie sicher, dass Sie die Variablennamen in Ihren Routen mit den Parametern in Ihrer Spezifikationsanforderung übereinstimmen.

+0

Das Hauptproblem meiner Frage ist das "XXX" - es ist - wie gesagt - in der routes-Datei fest codiert (ich mache das, weil ich benannte Routen brauche), also gibt es keinen: lang-Parameter, etwas/XXX/exec? query = bla und etwas/YYY/exec? query = bla sind vaild URLs und nur einer von ihnen (der erste in der Datei routes) kann über rspecs get erstellt werden ... – Stephan

+1

Ich weiß nicht, ob RSpec es möglich macht Wählen Sie eine bestimmte benannte Route über eine andere. Ich glaube, es wird immer nur die erste Route auswählen, die zu Ihren Params passt. Ich denke, das ist Absicht: RSpec möchte, dass Sie Dinge isoliert testen, z. Ihr Controller ist von Ihren Routen isoliert. Ich nehme an, Sie könnten es immer hacken, indem Sie die Methode, die die Anforderungs-URL zurückgibt, löschen. – rlkw1024

Verwandte Themen