Was passiert hier: rspec stub (: neu) .with ...?

8

Ich bin etwas verwirrt darüber, was mit den Scaffold-Controller-Spezifikationen passiert, die rspec erzeugt. Es schien sinnvoll zu sein, bis ich meiner App die Berechtigung hinzugefügt habe und nun meine Tests aktualisieren muss.

%Vor%

In meinem Controller füge ich beim Erstellen eines neuen Datensatzes einen Hash in params ein (die current_user ID muss gültig sein). MyClass.new (params [: meine_klasse] .merge (: user_id = & gt; current_user.id))

Test schlägt fehl

%Vor%

Es macht Sinn, dass der Test fehlschlägt, weil die neue Methode Parameter empfängt, die sie nicht erwartet hat. Es erwartet, dass {'diese' = & gt; 'params'} aber es tatsächlich erhalten {'diese' = & gt; 'params', 'user_id' = & gt; 1234}

Also ist meine natürliche Reaktion, den Test anzupassen, weil die neue Methode erhalten sollte {'this' = & gt; 'params', 'user_id' = & gt; 1234} und das Mock-Objekt zurückgeben.

Also füge ich wie folgt zum Test hinzu:

%Vor%

Hier werde ich durch eine Schleife geworfen. Die Ausgabe des Tests ist wie folgt:

%Vor%

Es scheint so, als ob ein erfolgreicher Test mir auf magische Weise ausweicht. Ich bin sicher, dass es einen logischen Grund für diese Ergebnisse gibt, aber ich kann sie nicht herausfinden.

Irgendwelche Hilfe? :)

Hinweis:

Die rspec-Seite sagt Folgendes:

%Vor%

oder

%Vor%

Das ist einfach genug, um es zu verfolgen, es erscheint nur seltsam, dass das erzeugte Gerüst diese Methoden nicht enthält (es sei denn, ich habe etwas verpfuscht, was möglich ist (:)

)

Pässe

%Vor%

schlägt fehl

%Vor%     
recursive_acronym 16.05.2011, 03:36
quelle

1 Antwort

4

"Traue keinem Junkie", wie es heißt. Man könnte auch sagen, "traue niemals einem Gerüst".

OK, das ist ein bisschen zu hart. Das Gerüst tut sein Bestes, um herauszufinden, welche Parameter für die Modelle / Controller, die Sie erzeugen, funktionieren, aber es weiß nichts über verschachtelte Ressourcen (was ich vermute, dass Sie es verwenden), so dass es das% co_de nicht erzeugt % im params-Hash. Fügen Sie Folgendes hinzu:

%Vor%

Der Schlüssel user_id wird als Beispiel generiert - entfernen Sie ihn und fügen Sie alle Parameter hinzu, die der Controller benötigt, um eine these_params zu erstellen.

In Bezug auf die Option MyClass : with und stub werden nur Nachrichten ausgeben, die die angegebenen Bedingungen erfüllen, d. h. wenn Sie Folgendes tun:

%Vor%

Dann antwortet MyClass auf jede Nachricht should_receive mit dem Schein. Wenn Sie andererseits tun:

%Vor%

Dann antwortet MyClass nur auf new , wenn es auch new als Argument erhält.

    
zetetic 17.05.2011, 02:14
quelle

Tags und Links