0

私は Rails 3.1 アプリを作成しており、3 つのキュウリ機能ファイルのセットがあります。次のように、個別に実行する場合:

cucumber features/quota.feature
-- or --
cucumber features/quota.feature:67  # specifying the specific individual test

...各機能ファイルは問題なく動作します。ただし、すべて一緒に実行すると、次のようになります。

cucumber

...テストの 1 つが失敗します。テストが1 つしか失敗しないのは奇妙です。機能の他のすべてのテストに合格します (そして、それらの多くは同様のことを行います)。機能ファイルのどこにこのテストを配置しても問題ないようです。それが最初のテストであるか、どこかにある場合は失敗します。

個別に実行したり、機能ファイル全体を個別に実行したりしても合格するため、テスト自体ではないと思います。異なる機能ファイルを一緒に実行することに関連する何らかの効果に違いないようです。何が起こっているのでしょうか?

4

2 に答える 2

4

シナリオ間に結合があるようです。失敗したシナリオは、システムが何らかの状態にあることを前提としています。シナリオが個別に実行されると、システムはこの状態になるため、シナリオはパスします。ただし、すべてのシナリオを実行すると、以前に実行されたシナリオがこの状態を変更するため、失敗します。

シナリオを完全に独立させることで解決する必要があります。どのシナリオの作業も、他のシナリオの結果に影響を与えるべきではありません。Cucumber BookSpecification by Exampleで強く推奨されています。

于 2012-07-08T18:19:43.123 に答える
0

同様の問題があり、根本的な原因を突き止めるのに長い時間がかかりました。@selenium タグを使用して、selenium クライアントで JQuery スクリプトをテストしていました。私のページには、POST リクエストを送信する ajax 呼び出しがありました。JavaScript にバグがあり、投稿リクエストが失敗していました。(この機能は完全ではなく、ajax 呼び出しの結果を検証する手順をまだ書いていませんでした。) このエラーは に記録されていCapybara.current_session.server.errorます。次の非セレン機能が実行されると、Capybara 内の Before フックが呼び出されCapybara.reset_sessions! 、次に呼び出されます

def reset!
  driver.reset! if @touched
  @touched = false
  raise @server.error if @server and @server.error
ensure
  @server.reset_error! if @server
end

@server.errorは次の機能の各シナリオで nil ではなく、Cucumber は各ステップがスキップされたと報告しました。私の場合の解決策は、ajax 呼び出しを修正することでした。したがって、アンドレイ・ボタロフとダグ・ノエルは正しかった。以前の機能から引き継いでいます。発生している例外が見つかるまでデバッグを続け、何が原因で発生しているのかを調査する必要がありました。これが、以前の機能から引き継がれたことに気づかなかった他の誰かの助けになることを願っています.

于 2013-01-31T23:34:53.973 に答える