2012-08-03 22 views
7

キュウリのシナリオを強制的に失敗させる方法はありますか?キュウリのシナリオを失敗させる方法を教えてください。

各テストの最後に、いくつかのシナリオがないかどうかを確認する必要があります。だから、私は 'エラー'ダイアログのチェックをして、それが起こった場合にテストに失敗すると思った。

これは以下のコードでは可能ですが、問題があります。一度私は失敗の例外を提起する!関数を実行すると、キュウリはAfterフックの残りの部分を停止するので、ログアウト関数は呼び出されません。

ました:今

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 

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

は例外を発生させずキュウリのテストに失敗するより良い方法はありますか?

答えて

8

を試してみてください。カピバラ/ RSpecの例外を除いてずっと行って、私はあなたが行うことができるとは思わなかった!

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

しかし、あなたがこれを行うかscenario.fail()を行う場合、あなたはまだログアウトしません。あなたはbegin-sureブロックでそれをラップする必要があります。

これを試してみてください:

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

更新

あなたは標準のアサーションを呼び出し、直接シナリオを失敗したくない場合は、次の操作を行うことができます - あなたはfailの代わりを使用する必要があります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

Justin、ありがとうございました。私は、例外を起こさずにシナリオを失敗させる方法があることを期待していました。 – snowstreams

3

私はまだそれをチェックアウトできませんでしたが、私はRaiseを呼び出すと、実行を停止することが保証されていると思います(ただし、procまたはlambda内で行われて評価が延期されない限り) 。

はあなたの通常のアサーションを使用して失敗するフックの後に取得することができ、単に

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

申し訳ありませんが、 'scenario.failを試してみてください( 'メッセージ')' –

+0

おかげで、私がトライ!そこにもエド。 未定義のメソッド 'メッセージ」 "メッセージ" のために:文字列(NoMethodError)だから私はこれを試してみました :! scenario.fail(ログアウト) この半分が働い 私はエラーを得ました。少なくともログアウトコードを実行してテストに失敗しましたが、それでもエラーメッセージが表示されました: 未定義のメソッドmessage:NilClass(NoMethodError) – snowstreams

+0

どこから来ているのか混乱しています。そのエラーの原因となっている現在のコードの質問ですか? –

関連する問題