Cucumber-js: BeforeStep / AfterStepフックを远加したす

䜜成日 2018幎01月04日  Â·  33コメント  Â·  ゜ヌス: cucumber/cucumber-js

すべおのステップが終了した埌の怜蚌に圹立ちたす。 thisはワヌルドむンスタンスである必芁がありたす

最も参考になるコメント

こんにちは、みんな、

ステップフックの曎新はありたすか たたは、各ステップの実行前および/たたは実行埌にコヌドを実行するための回避策はありたすか

党おのコメント33件

@charlierudolphここでお手䌝いしたいのですが、それを実装する適切な方法に぀いおのポむンタが必芁です。 最近削陀されたregisterHandlerの構文糖衣AfterStepがあったず思いたす。 support_code_library_builder /define_helpers.jsを芋たした。 しかし、これらのフックを実装する方法に぀いおのいく぀かの指針が必芁です。
ありがずう
アリ
PS結果のjson圢匏を元に戻しおいただきありがずうございたす。

ここでの質問は、これがワヌクフロヌにどのように圱響するかずいうこずです。 これはステップ結果のステヌタスを線集できたすか、それずも合栌/䞍合栌になる可胜性のある別のステップずしお機胜したすか

コメントの1぀で芋た、たた䜿甚したいナヌスケヌスは、ステップの埌にスクリヌンショットを䜜成するこずです。 キュりリのルビヌでは、Scenarioオブゞェクトぞのアクセスを提䟛するAfterStepを䜿甚したした。
IMHOアフタヌステップフックは、ナヌザヌがステップ結果を内省したいが結果を倉曎できないナヌスケヌスにのみ䜿甚する必芁がありたす。 たた、合栌/䞍合栌ずなる可胜性のある別のステップであっおはならないず思いたす。

@charlierudolph私も同様の解決策を探しおいたす。
registerHandlerが非掚奚になる前に、このコヌドを䜿甚しお、倱敗した手順の埌にスクリヌンショットを撮りたした。

`` `
this.registerHandler 'StepResult'、functionevent、callback{
var stepResult = event.getPayloadItem 'stepResult';

if (stepResult.getStatus() == 'failed') {
  takeScreenshot()
    .then(function () {
      callback();
    });
} else {
  callback();
}});

`` ``

今、私はこれに察する解決策を持っおいたせん。

こんにちは、

私が読んだほずんどのスレッドで、BeforeStep / AfterStepフックに関しお、ナヌスケヌスがプリントスクリヌンを䜿甚しおいるこずを確認したした。 これは私のナヌスケヌスではなく、これらのフックの他のナヌスケヌスを衚明したいだけです。

私のプロゞェクトではこれを䜿甚しおいたす。キュりリ1.xのAfterStepフックは次の目的で䜿甚されたす。

  • デヌタの収集-すべおの倖郚リンクなど
    element.all(by.css('a')).each(function(link) { link.getAttribute('href').then(function(href) { ... }); });

次に、すべおの倖郚リンクが別のテストスヌツでテストされたす。

  • 芁玠IDの重耇をチェックする目的は、すべおのIDがHTML暙準に準拠するために䞀意であるこずを確認し、テストの䜜成を容易にするこずです
  • スクリプト゚ラヌをチェックしたすAfterStepは、シナリオが実際に倱敗するようにAfterフックの倉数を蚭定したす。
  • ブラりザのアラヌトを無芖したす。 いく぀かのテストシナリオでは、Webブラりザがアラヌトりィンドりを開きたすが、これは無芖する必芁がありたす。 これは特にフォヌムず入力芁玠がある堎合に圓おはたり、ブラりザは譊告を発したす「未保存の倉曎がありたす...」

珟圚、Cucumber4.0.0ずProtractor4.0.14を䜿甚しおいたす

補足Cucumber 1.xxのthis.AfterStepは、このタむプのコヌドを含むように蚭蚈されおおらず、競合状態に問題があったため、ナヌスケヌスは正しく機胜したせんでした。 そのため、Cucumber 4.0.0にアップグレヌドし、適切にサポヌトされるたでAfterStepロゞックを無効にしたした。

こんにちは、

ステップフックの前埌にこれに関する曎新はありたすか
AfterStepフックの回避策はありたすか 特定のテストが倱敗した堎合は、スクリヌンショットを撮りたいず思いたす。

デフォルトのWorldコンストラクタヌhttps://github.com/cucumber/cucumber-js/blob/master/docs/support_files/world.mdをオヌバヌラむドしたため、「attach」は䜿甚できたせん。

Thnx

こんにちは@ gajo4256 、

私はキュりリ4.0.0ずこのスニペットを䜿甚しおいたす

After(function (scenario) {
  if (scenario.result.status === Status.FAILED) {
    const World = this;

    return browser.takeScreenshot().then(function (buffer) {
      return World.attach(buffer, 'image/png');
    });
  }});

これにより、倱敗したすべおのシナリオの埌にスクリヌンショットが䜜成されたす。 キュりリでは、ステップが倱敗するたびにシナリオ党䜓が倱敗するため、私にずっおはうたくいきたす。したがっお、「ステップが倱敗した埌」ずほが同じです。

それが圹に立おば幞い。

こんにちは@mracz 、

thnx、私は実際にこれを詊したしたただし、各ステップの埌で、私にはより適しおいたす。
デフォルトのWorldコンストラクタヌをオヌバヌラむドしたので、通垞の堎合ず同じように、アタッチを再床䜿甚できるようにするにはどうすればよいですか

Thnx

こんにちは@ gajo4256 、

これは、カスタムワヌルドの実装にあるものです。

const { setWorldConstructor } = require('cucumber');

function CustomWorld( { attach } ) {
  this.attach = attach;
}

setWorldConstructor(CustomWorld);

@mracz 、私は珟圚、各ステップでこれを行っおいたす

    When('I do something', function () {
        return takeScreenshot(this, () => {
            return $(...).click();
        });
    });

スクリヌンショット撮圱機胜は次のずおりです。

export function takeScreenshot(world, stepToExecute: () => promise.Promise<any>): promise.Promise<any> {
    return stepToExecute().then(() => {
        return doTakeScreenshot(world);
    }).catch((err) => {
        return doTakeScreenshot(world).then(() => {
            throw err;
        });
    });
}

function doTakeScreenshot(world) {
    return browser.takeScreenshot().then((screenshot) => {
        world.attach(screenshot, 'image/png');
    }).catch((err) => {
        console.warn('Could not create screenshot', err);
    });
}

私は䟋倖に぀いおあたりにも防埡的だったかもしれたせんが、䜙分なコヌドが実際のテスト結果に干枉しないように最善を尜くしたした。 私が今できる最善のこずは、 AfterStepフックが機胜するず、ボむラヌプレヌトの远加が少なくなるこずです。

ただし、フックがおそらく実行しないのは、画面を倉曎しないアサヌションを䜜成しおいるずきにスクリヌンショットをスキップするこずですしたがっお、スクリヌンショットは圹に立たないでしょう。たずえば、 Then some element is not shown 。 拡匵可胜なワヌルドオブゞェクトが圹立぀ず思いたす。

AfterStepフックの別の䜿甚䟋を次に瀺したす。ピアが同期するのを埅ちたすベクタヌクロックたたはランポヌトタむムスタンプを䜿甚。 / cc @tooky @jbpros

こんにちは、みんな。
私は実際にこの問題に取り組んでいたす。

私たちは、すべおの異なるステップからスクリヌンショットを撮る方法を探しおいたす。
珟圚、キュりリからStepDefinitions関数をオヌバヌラむドするこずを考えおいたす。

それが最善の方法かどうかわからないので、遠慮なくご意芋をお聞かせください。

定矩関数ラッパヌを䜿甚しおこれを行う方法がここで苊劎しおいる人のために https //github.com/PeerioTechnologies/peerio-icebear/blob/dev/test/e2e/code/hooks.js#L28

私たちの䞻なナヌスケヌスは、ここでは他の䟋のようになりたすスクリヌンショットですが、構成でデバッグモヌドをオンにした堎合に各ステップの出力を確認できるように、より倚くのデバッグツヌルずしお䜿甚したす。

別の甚途りェブサむトに䞀定の時間が経過するず衚瀺される可胜性のあるモヌダルがいく぀かありたす。 シナリオを実行する堎合は、すべおのステップの埌に、これらのモヌダルがペヌゞに衚瀺されおいるかどうかをチェックしお、これらのモヌダルが原因でテストが脆匱でないこずを確認する必芁がありたす。

別のナヌスケヌス誰かがダッシュボヌドを備えたレポヌトツヌル珟圚実行䞭のテストステヌタス、以前に実行されたテストケヌスなどを䜜成したい堎合、キュりリは進行状況の曎新のためにステップフックでツヌルに投皿できたす。 これは珍しい䟋ですが、私が考えた今、これを調べたいず思っおいたす。

KyleFairns、あなたが蚀ったようにダッシュボヌドにはAfterStepが必芁です

こんにちは、

各ステップの埌にjavascript゚ラヌがあるかどうかを確認したいず思いたす。 倱敗したステップだけではありたせん。
@ markus-lundin-86ず同じビット
今では、各シナリオの埌でのみそれを行うこずができたす。
それで、これはロヌドマップ䞊にありたすか、それずも誰か他の解決策がありたすか

WebDriverIOにキュりリのbeforeStepフックずafterStepフックがあり、問題を解決できるこずを発芋したした。

お圹に立おば幞いです...

こんにちは、みんな、

ステップフックの曎新はありたすか たたは、各ステップの実行前および/たたは実行埌にコヌドを実行するための回避策はありたすか

こんにちは、みんな、
@ Prasant-Sutariaず同じ状況で。
ステップフックたたは回避策に関する曎新はありたすか
前もっお感謝したす。

曎新はありたせん。 誰かがこれに察するプルリク゚ストを送信するのをただ埅っおいたす。

これに察するロヌドマップや䜕かはありたすか これはこの機胜を䜿甚する䞊での倧きな問題の1぀であるため、公匏の声明があればよいでしょう。

@aslakhellesoyプルリク゚ストで実装する必芁のあるチェックリストなどはありたすか AFAIK1058および1121は、この機胜、たたは回避策のいく぀かの方法を導入しようずしたす。

やあみんな、
この問題に関するPRを䜜成したした https//github.com/cucumber/cucumber-js/pull/1198。
圹に立ったら教えおください。

@aslakhellesoy 、この問題/機胜のリク゚ストに察凊するために、䞊蚘のPR1198を䜜成したした。 それを芋おください、たたは私が連絡すべき誰かを私に教えおもらえたすか
cc @charlierudolph

曎新はありたすか それも楜しみにしおいたす:)

2぀のPRが衚瀺されたす@ leonardonelson91
圌らはこの機胜を実装するための最良の方法を芋぀けられなかったず思いたす
https://github.com/cucumber/cucumber-js/pull/1198
https://github.com/cucumber/cucumber-js/pull/1058

@charlierudolph BeforeStepおよびAfterStepに察しお登録された関数が、ステップがタむムアりトした堎合でも実行する必芁があるかどうかに぀いおの芋解はありたすか

ここにある他のいく぀かのように、私はスクリヌンショットを実珟するためにsetDefinitionFunctionWrapperを䜿甚しおいたす。これは、テストステップがタむムアりトしたずきの方法がないこずを陀いお、うたく機胜したす。ステップがただアクティブである間にスロヌされるように、ブラりザのむンス​​トルメンテヌション。 setDefinitionFunctionWrapperの修正に取り組みたいず思っおいたすが、ここでも意図が䜕であるかを知りたいず思いたした。

ステップが成功/倱敗したかどうかに関係なくタむムアりトたたはその他の理由で、BeforeStep / AfterStepが実行されるこずを期埅したす

スクリヌンショットに関するものではない、これに远加のナヌスケヌスを远加するだけです。 むベント駆動型システムをテストしおいたすが、テストによっおむベントが生成されたす。 次に、これらのむベントが読み取られ、システムに倉曎が加えられたす。

次の手順では、システムが予期された状態にあるこずを怜蚌したす。これには、すべおのむベントが凊理されおいる必芁がありたす。 次のステップに進む前に、キュヌが完党に凊理され、保留状態になっおいるものがないこずを確認できるようにしたいず思いたす。

珟圚、怜蚌ステップでむベントストリヌムのポヌリングを行っおいたすが、フックに入れるだけでよいでしょう。 次のステップに進む前に、システムが安定した状態であるこずがナビキタスな芁件であるため。

@davidjgoss @charlierudolphスクリヌンショットのBeforeStep / AfterStepを実珟するために、setDefinitionFunctionWrapperのサンプルコヌドを教えおください。NightwatchJSを詊しおいたす。

こんにちは@RArkasaliこれが私が取り組んでいるプロゞェクトのスニペットです

import {setDefinitionFunctionWrapper} from "cucumber";

setDefinitionFunctionWrapper(function(fn) {
    return async function(...args) {
        try {
            return await fn.apply(this, args);
        } catch (ex) {
            await this.takeScreenshot();
            throw ex;
        }
    };
});

ここで、 takeScreenshotは、実際のスクリヌンショットを撮る䜜業を行うカスタムWorldのメ゜ッドです。私はナむトりォッチに粟通しおいないため、どのように芋えるかを知るこずはできたせんが、きっずそうなるでしょう。なれ。

したがっお、step関数内から゚ラヌアサヌションの倱敗などが発生した堎合、これはスクリヌンショットを撮りたす。 ゚ラヌのない結果を返すずいう事実は重芁です。 return "pending"のステップが凊理されおいない間、戻り倀を飲み蟌んでいるこずに気付くたで、しばらく混乱しおいたした。

お圹に立おれば

こんにちは、みんな、
この問題の状況はどうなっおいたすか それでも助けが必芁ですか
BeforeStepずAfterStepに興味がありたす。これは、すべおのステップ名ず远加のログ情報を含む「ログ」ファむルを䜜成するのに圹立぀ためです。 カスタムフォヌマッタを䜜成するよりも少し簡単です。

これはhttps://github.com/cucumber/cucumber-js/pull/1416の䞀郚ずしお远加されたした

https://github.com/cucumber/cucumber-js/pull/1416にフックが远加されたため、この問題を解決したす

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡