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

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

4

2 に答える 2

8

通常のアサーションを使用して、afterフックを失敗させることができます。Capybara / rspecの例外についてはあまり行っていませんが、次のことができると思います。

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

ただし、これを実行するか、scenario.fail!()を実行しても、ログアウトはできません。あなたはそれをbegin-ensureブロックで包む必要があります。

これを試して:

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
于 2012-08-03T14:30:48.277 に答える
3

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

簡単に試してください

if page.has_selector?(:dialog_message, 1, :text => 'Error')
    scenario.fail!(StandardError.new('Unexpected Error Dialog!'))
end
logout
于 2012-08-03T13:59:02.833 に答える