2016-06-17 6 views
1

これは、自己回答の質問で共有するのに十分な一般的な問題であると考えました。一般的なシナリオ前のタスクが失敗したにもかかわらず無条件に粗タスクを実行するが、失敗した終了コードを維持する

は私が合格または失敗する可能性があります主なタスクを持っている、と私は無条件ティアダウンのように別々のタスクを実行する必要があります。

また、最終的にメインタスクの合否ステータスを使用して終了する必要があります。私は分度器を実行する前に、いくつかの設定を行う必要があり

コンクリートシナリオ

  • 分度器を動かした後にティアダウンをする必要があります。
  • セットアップとティアダウンは複雑で、分度器onPrepareブロックとonCleanupブロックでこれらのタスクを実行するのが快適ではありません。
  • これらのセットアップとティアダウンは、私の分度器の仕事の前後に実行される別々の仕事としてモデル化したいと思います。
  • 分度器の合格/不合格にかかわらず、毎回解雇が必要です
  • 分度器の合格/不合格を表す最後の終了コードが必要です。

    Attempt1:

は、私は(分度器を使ってE2Eテストのため)タスクと呼ばれるE2Eを持っていると仮定し

grunt.registerTask('E2E', ['setupProtractorEnvironment', 'protractor', 'teardownProtractorEnvironment']); 

分度器はその後、ティアダウンが実行されていない障害が発生した場合。

Attempt2:次のように私はgrunt-force-taskを使用して、この問題の一部を解決することができ

作男力タスクを追加します。

grunt.registerTask('E2E', ['setupProtractorEnvironment', 'force:protractor', 'teardownProtractorEnvironment']); 

今teardownProtractorEnvironmentは関係なく、常に分度器が失敗したかどうかの、実行されますいいえ、終了コードは常に0になります。

試してみましょう:grunt this.requires()を使用してください

grunt.registerTask('exitWithProtractorStatus', function() { 
    this.requires(['protractor']); 
    return true; 
}) 

grunt.registerTask('E2E', ['setupProtractorEnvironment', 'force:protractor', 'teardownProtractorEnvironment', 'exitWithProtractorStatus']); 

分度器が失敗したときに今、ティアダウンはまだ実行されますが、終了コードは3(タスク・エラー)である

最終エラーコードは、私がCIに、この単調なタスクを使用すると、失敗した場合に構築することが重要です分度器E2Eが故障したとき。

HTH!

答えて

1

質問試行3で、gruntのthis.requires()を使用して新しいタスクを追加して、前のタスクの状態をテストできます。

this.requiresは、http://gruntjs.com/api/inside-tasks#this.requiresと記載されています。基本的には、指定されたすべての「必須」タスクが既に実行されて渡されていない限り、現在のタスクは失敗します。

関連する問題