Cucumber-js: シナリオの結果がフックの前後に渡されない

作成日 2017年08月09日  ·  19コメント  ·  ソース: cucumber/cucumber-js

bug

最も参考になるコメント

onFailedTestStepではなく、 AfterStepというフックを定義してみませんか? キュウリ-ルビーは長い間これを持っていました、そしてあなたが知っているように-一貫性は重要です。

全てのコメント19件

これに噛まれました。 このため、キュウリプロでの3へのアップグレードは保留になっています。

https://github.com/cucumber/cucumber-js/blob/fbff6b0fae54d2e341ee247addc60a9f05753f1d/src/runtime/test_case_runner.js#L109が原因ですか?

これのどの部分が正確に必要ですか? ステータス述語だけを使用していますか? これを取り巻くドキュメントで使用されているのはそれだけのようです

現在、 scenarioResult.statusscenarioResult.scenario.uriscenarioResult.scenario.lineます。

@jbprosあなたのユースケースは、これを取り巻く現在の例に従いますか(シナリオが失敗したときにスクリーンショットを保存します)? シナリオがフックに渡されるのは本当に奇妙だといつも思っていたので、これを処理する別の方法を見つけたいと思いました。

現在、新しいサポートコード関数onFailedTestStepを追加することを考えています。これにより、テストステップで呼び出される関数を設定できますが失敗します。 失敗したステップと同じワールド引数で呼び出されるため、画像などを添付できます。 イベントプロトコルフォーマッタから添付ファイルを解析し、それらをフォルダにコピーするための専用モジュールを作成できます。

いじくり回すユーザーとして、私はそのような関数/ハンドラー/オブジェクトにできるだけ多くのコンテキストを持たせたいと思います。 past-and-future-run-tree(https://github.com/cucumber/cucumber-js/issues/875)全体のような壮大なものがなくても、現在のステップとシナリオを知ることは非常に役立ちます。それぞれの失敗。
たとえば、これにより、タグに従ってロールバックプロシージャを制御したり、失敗したステップの前に実行された他のステップを確認したりできます。

それがあなたが求める解決策であるならば、私はあなたにこれらをonFailedTestStepに渡すことを検討することを勧めます。

フックドキュメントも更新する必要があります。最初の段落のScenarioResultへのリンクは404です。

onFailedTestStepではなく、 AfterStepというフックを定義してみませんか? キュウリ-ルビーは長い間これを持っていました、そしてあなたが知っているように-一貫性は重要です。

@aslakhellesoyユースケースに焦点を当て、それを正しい方法で解決していることを確認したいと思います。

一貫性は重要ですが、それが他の場所に存在するという理由だけですべてをコピーする必要があるという意味ではありません。 物事を処理するためのより良い方法を決定するにつれて、私たちは進化する必要があります

あなたや@mattwynne、またはルビーチームの誰かが、AfterStepが何のために構築され、何のために使用されているのかを明らかにすることができますか?

私はルビーチームの出身ではないので、 AfterStepが何のために作られたのかわかりませんが、個人的にはAfterStepを使ってさまざまな操作を行っています。 ここではいくつかの例を示します。

  1. スクリーンショットを撮り、失敗したシナリオでブラウザログを出力します
  2. 失敗したかどうかに関係なく、一部のプロジェクトに対して追加のログを記録します
  3. 掃除

私たちにとっては、追加のロギングを行うために、とにかくシナリオと結果をAfterStep渡す必要があります。 AfterStepでそれらを必要とする他のユースケースもあると確信していますが、私たちも考慮していません。

つまり、 onFailedTestStepようなものがあった場合、同じことを実現する方法は複数あります。1つはAfterStepを使用し、もう1つはonFailedTestStepを使用します。

これは、誰がフックを実装したかによっても、プロジェクト内で不整合を引き起こす可能性があります。 AfterStepを使用するものもあれば、 onFailedTestStep使用するものもあります。 どちらも望ましいとは思いません。

@charlierudolph

あなたがどこから来ているのか理解したいです。 次のように思う理由を詳しく説明していただけませんか。

シナリオがフックに渡されたのは本当に変だといつも思っていました

私は2つのパラダイムの混合が本当に好きではありませんでした。 ビフォー/アフターフックは、実際にテストを実行する際のセットアップ/ティアダウンに関連しています。 レポートにも使用することは、個別に処理する必要があるようです。

スクリーンショットを撮り、失敗したシナリオでブラウザログを出力します

AfterStepでこれを実行している場合、これは失敗したシナリオではなく、失敗したステップに対して

失敗したかどうかに関係なく、一部のプロジェクトに対して追加のログを記録します

どのような種類の追加ロギングを行いますか?

掃除

ステップの後にクリーンアップするものは何ですか?

私たちにとっては、追加のロギングを行うために、とにかくシナリオと結果をAfterStepに渡す必要があります。 AfterStepでそれらを必要とする他のユースケースもあると確信していますが、私たちも考慮していません。

私はそれらのユースケースを収集しようとしています。 他の方法がある場合や、より良いサポートを構築できる何かの回避策として、人々がそれを使用している場合があります。

つまり、onFailedTestStepのようなものがあった場合、同じことを実現する方法は複数あります。1つはAfterStepを使用し、もう1つはonFailedTestStepを使用します。

Cucumber-jsには現在AfterStepがなく、両方を実装する予定はありません。

分度器-キュウリ-フレームワークでキュウリ3のサポートを取得しようとしていますが、実際にはAfterStep使用できます。 他の2つのライブラリを結合するライブラリは、最も一般的なユースケースではありませんが、はるかに簡単になると思います。 新しいイベントプロトコルのものでそれを行う方法を理解しようとしていますが、 *-finishedイベントのいずれにも機能/シナリオ/ステップコンテキストがありません。 機能、シナリオ、および手順の名前、URI、および行番号を使用して分度器にレポートし、IDE統合(Intellij)にツリーで表示およびナビゲートするための何かを提供します。 とにかく私の0.02ドル。

説明したすべての機能(およびそれ以上)はsetDefinitionFunctionWrapperで実現できます。
すべてのステップを事前/事後アク​​ションでラップできます。これにより、ステップの入力と出力に反応できるだけでなく、それらを変更することもできます。

したがって、たとえば、「次のステップはエラーXYZで失敗するはずです」ステップを実装するために使用します。これにより、重複するネガティブステップや、すべてのステップで特別なフリップ可能なエラー処理を実装することなく、ディープネガティブチェックとエラーシミュレーションをすばやく実装できます。 。

AfterStepフックでできること、 setDefinitionFunctionWrapperできないことは何もないと思います。

これに関する更新はありますか? 職場で2.0.0から3.0.0にアップグレードしようとしていますが、scenarioResultが未定義のままです

@ paul-phillips-arkはい、#905を参照してください。 それを前進させたい場合は、分岐して、 @ charlierudolphのコメントに対応する新しいprを送信できます。

console.log(scenarioResult)を実行すると、Before関数とAfter関数の両方でまだ未定義になっていますか? 私は何かが足りないのですか? 上記のコメントが密集している場合はお詫び申し上げます。

私のユースケースは現在次のとおりです。

各シナリオの前に、テスト用にデータベースを埋めるフィクスチャを要求します。 すべての機能には、それに必要な独自のフィクスチャのセットがあります。 サーバー上のフィクスチャのパスは機能のパスを繰り返すので、 uriオプションも必要です。

Before({ timeout: 60 * 1000 }, scenarioResult => {
    ...
    const file = scenarioResult.scenario.feature.uri;
    ...
});

Afterフックで、私たちの多くがスクリーンショットを作成します。

After(scenarioResult => {
    if (scenarioResult.status === 'failed') {
      driverUtils.takeScreenShot(scenarioResult.scenario.name);
    }
});

@charlierudolph暫定的な解決策として、プルリクエスト#905でリリースをカットできますか? これにより、v2からv3への移行を完了することができます。これは、このリグレッション/変更のために現在スタックしています。 提案されたリファクタリングは、別のプルリクエストに入る可能性があります。

#905にはいくつかの問題がありますが、今週末に修正を加えてリリースする予定です。

このスレッドは、閉じられた後に最近のアクティビティがないため、自動的にロックされています。 関連するバグについては、新しい問題を開いてください。

このページは役に立ちましたか?
0 / 5 - 0 評価