2010-07-10 12 views
6

Ich benutze Gurke als BDD-Framework mit Rspec/Mokka Mocking. Idealerweise würden wir kein Stumpfverhalten in Gurkenspezifikationen machen; Das Szenario ist hier jedoch außergewöhnlich. Um Ihnen die kurze Idee des Problems hier zu geben; Ich habe zwei Funktionen Produktfunktion und Warenkorbfunktion.Stub mit Rspec/Mocha in Gurken-Szenarien

Warenkorb-Funktion verspottet derzeit einige der Produkt holen aus 3-Parteien-System. Und in Gurke Run Cart-Funktion läuft vor Produkt-Funktion. Die Produktfunktion verwendet einen echten Aufruf für einige Szenarien. Im Idealfall würden wir erwarten, dass Klassenstubs wie Product.stub (: find) gelöscht werden, sobald die Szenarien abgeschlossen sind. Das ist jedoch nicht der Fall. Class-Level-Stubs bleiben beim nächsten Gurken-Szenario-Lauf und stören den Call.

Ich austauschbar Mocha und Rspec verwendet, um die Stubs zu induzieren; aber kein Nutzen; In beiden Fällen bleibt der Stub bestehen und verhindert, dass meine Produktfunktion nach der Warenkorbfunktion ausgeführt wird. Beide laufen isoliert gut.

Hat jemand mit ähnlichen Problem der Stubs nicht in Gurke zurückgesetzt? Gibt es eine Möglichkeit, das ursprüngliche Klassenverhalten wiederherzustellen?

Jede Hilfe wird geschätzt.

Prost

Antwort

8

Für Mokka-Integration, sollten Sie Folgendes in einer Datei in Ihren Funktionen/Support-Ordner (wie mocha.rb)

require "mocha" 

World(Mocha::Standalone) 

Before do 
    mocha_setup 
end 

After do 
    begin 
    mocha_verify 
    ensure 
    mocha_teardown 
    end 
end 

Der letzte Block sollte die Freilassung aller Mocks hinzufügen.

Quelle: http://gist.github.com/80554

+0

genial. Genau das, was ich brauchte, um Rspec-Mocking/Stubbing auszugeben und mit Mokka zu gehen! :) – Priyank

4

Syntax ist etwas anders für Mokka 1.1:

require 'mocha/api' 

World(Mocha::API) 

Before do 
    mocha_setup 
end 

After do 
    begin 
    mocha_verify 
    ensure 
    mocha_teardown 
    end 
end