Jest: グローバル `jest-cli`を実行すると、エラーではなく警告が表示されます

作成日 2016年07月14日  ·  3コメント  ·  ソース: facebook/jest

グローバルにインストールされたバージョンのJestを実行するときにトリガーされたprocess.exit(1)呼び出しは、奇妙なテスト結果になります-すべてのテストに合格した場合でも、プロセスはゼロ以外の終了コードを返し、その理由はすぐにはわかりません。

jestnpm test割り当てられると(これはかなり一般的な規則です)、次のようになります。

Please run `npm install` to use the version of Jest intended for this project.
...
163 tests passed (163 total in 30 test suites, run time 3.292s)
npm ERR! Test failed.  See above for more details.

明らかな詳細(「実行してください...」の行はエラーメッセージのようには見えません)や失敗したテストはないため、デバッグは厄介です。

推奨事項

  1. パッケージローカルバージョンのJestのテストをgetJest完全に削除したいと思います。 npm installを実行せずに非ローカルバージョンのJestを使用したい場合、パッケージがなぜ気にする必要があるのか​​わかりません。
  2. テストが十分に役立つ場合は、終了コードに影響を与えずにconsole.warnを使用する必要があります。これは、テストが問題なく実行される可能性があるためです。警告は、出力がユーザーの意図を正確に反映していない可能性があることを示す十分な指標です。
  3. ゼロ以外の終了コードを返すことが望ましい場合は、デバッグを容易にするために、テストで実際のErrorをスローする必要があります-ノードの組み込みエラー処理は、 console.error後にprocess.exit(1)続くよりもはるかに明示的です
  4. 本当にエラーをスローしたくない場合は、すべてのテストが実行されるのを待つのではなく、すぐにprocess.exit(1)呼び出します-ローカルで定義された依存関係が欠落しているときにJestをグローバルに実行することができない場合は、そうすべきではありませんまったく実行されません。

最も参考になるコメント

@mmcgahan @cpojerヤーンワークスペースmonorepo内の子パッケージ内でJestを実行すると、この致命的でないエラーが発生します。 jestを探す方法が、monorepoルートに引き上げられているパッケージを処理していないため、エラーが表示されているように感じますか?

全てのコメント3件

これを提起し、問題の詳細な説明をありがとうございます。 正直なところ、私はこのことについて自分自身で腹を立てており、それは間違いなくJestのテストスイートを扱うのを少し難しくしています。

とにかくJestがまだテストを実行することになった場合、これが現在機能している方法が意味をなさないことにも同意します。 ご不便をおかけして申し訳ございません。

プルリクエストを送信してもよろしいですか?

私の提案は次のとおりです。

  • process.exit(1)削除します。
  • process.on('exit', () => console.log(chalk.red('The error message ')))実行すると、テスト実行の最後に、何かが適切ではないことを示す赤いメッセージが表示されます。

これにより、間違ったバージョンのJestを使用できるようになります(重大な変更がある可能性があるため、お勧めしません)が、テストの実行は適切に終了し、下部にメッセージが出力されます。 どう思いますか?

@cpojerそれは私のために働きます、迅速な応答に感謝します! 間もなくPRを提出します

@mmcgahan @cpojerヤーンワークスペースmonorepo内の子パッケージ内でJestを実行すると、この致命的でないエラーが発生します。 jestを探す方法が、monorepoルートに引き上げられているパッケージを処理していないため、エラーが表示されているように感じますか?

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