2012-08-03 5 views
7

Gibt es eine Möglichkeit, ein Gurken-Szenario zum Scheitern zu bringen?Wie man ein Gurkenszenario zum Scheitern bringt?

Ich muss am Ende jedes meiner Tests auf ein paar versagende Szenarien prüfen. Also dachte ich, ich könnte die Überprüfung für einen "Fehler" -Dialog machen und dann den Test nicht bestehen, wenn es auftrat.

Dies ist mit dem folgenden Code möglich, jedoch besteht ein Problem. Sobald ich die Ausnahme in dem Fehler erhebe! Funktion, dann stoppt Gurke den Rest des After-Hooks, so dass die Logout-Funktion nicht aufgerufen wird.

Waren

After() do |scenario| 
    #Checking for Error popups 
    if page.has_selector?(:dialog_message, 1, :text => 'Error') 
    fail!(raise(ArgumentError.new('Unexpected Error dialog!'))) 
    end 
    logout 
end 

Jetzt:

After() do |scenario| 
    #Checking for Error popups 
    if page.has_selector?(:dialog_message, 1, :text => 'Error') 
    scenario.fail!(logout) 
    end 
end 

Gibt es eine bessere Art und Weise, ohne eine Ausnahme ausgelöst eine Gurke Test zum Scheitern verurteilt?

Antwort

8

Sie können die nach dem Haken bekommen normale Behauptungen zum Scheitern verurteilt werden. Haben Sie nicht mit Capybara/rspec Ausnahmen viel getan, aber ich denke, Sie tun können:

page.should have_selector?(:dialog_message, 1, :text => 'Error') 

aber wenn Sie dies tun oder das scenario.fail tun(), werden Sie noch nicht abmelden. Sie müssen es in einen Start-Save-Block einbinden.

Versuchen Sie folgendes:

After do |scenario| 
    begin 
     page.should have_selector?(:dialog_message, 1, :text => 'Error') 
    ensure 
     logout 
    end 
end 

aktualisieren

Wenn Sie die Standard Behauptungen nicht nennen wollen und direkt das Szenario fehlschlagen, können Sie folgendes tun - Sie müssen fail verwenden statt fail!:

After() do |scenario| 
    begin 
    #Checking for Error popups 
    if page.has_selector?(:dialog_message, 1, :text => 'Error') 
     fail(ArgumentError.new('Unexpected Error dialog!')) 
     #Or you can just do fail('Unexpected Error dialog') if you do not care about the type. 
    end 
    ensure 
    logout 
    end 
end 
+0

Danke Justin, ich habe nie daran gedacht, den Sicherheitsblock zu benutzen.Ich hatte gehofft, dass es einen Weg geben würde, das Szenario zum Scheitern zu bringen, ohne eine Ausnahme zu machen. – snowstreams

3

Nur eine vorläufige Antwort, da ich es noch nicht auschecken konnte, aber ich nehme an, dass das Aufrufen von Raise immer die Ausführung stoppt (es sei denn, es wird innerhalb eines Proc oder Lambda durchgeführt, so dass die Bewertung aufgeschoben wird) .

Versuchen Sie einfach

if page.has_selector?(:dialog_message, 1, :text => 'Error') 
    scenario.fail!(StandardError.new('Unexpected Error Dialog!')) 
end 
logout 
+0

Sorry, versuchen 'scenario.fail ('message')' –

+0

Dank, Tri I ed das auch dort. habe ich den Fehler: nicht definierte Methode 'Nachricht‘ für "message": String (NoMethodError) Also habe ich versucht, dies: scenario.fail (Logout) in dieser Halbzeit gearbeitet. Zumindest hat es meinen Abmeldecode ausgeführt und den Test fehlgeschlagen, aber es gab immer noch eine Fehlermeldung: undefinierte Methode 'Nachricht 'für Nil: NilClass (NoMethodError) – snowstreams

+0

Ich bin ein bisschen verwirrt, wo das herkommen könnte - könnten Sie aktualisieren die Frage mit dem aktuellen Code, der diesen Fehler verursacht? –

Verwandte Themen