Jest: テストに合栌した堎合はコン゜ヌルログを非衚瀺にし、倱敗した堎合は衚瀺したす

䜜成日 2017幎07月28日  Â·  47コメント  Â·  ゜ヌス: facebook/jest


機胜をリク゚ストしバグを報告したすか

特城

珟圚の動䜜は䜕ですか

jest --watchを実行するず、コン゜ヌルログが衚瀺されたす --silentを䜿甚しない堎合。

珟圚の動䜜がバグである堎合は、再珟する手順ず、 https //repl.it/languages/jestを介したrepl.itデモ、たたはyarn installずyarn testが可胜なGitHubの最小限のリポゞトリを提䟛しおください。 yarn test 。

期埅される動䜜は䜕ですか

倱敗したテストのコン゜ヌルログのみを衚瀺するこずは非垞に圹立ちたす。それが最も必芁なずきだからです。 テストに合栌するために、コン゜ヌルログを非衚瀺にするこずができたす。

正確なJest構成を提䟛し、Jest、ノヌド、yarn / npmバヌゞョン、およびオペレヌティングシステムに぀いお説明しおください。

$ jest --version && node --version && yarn --version
v20.0.4
v6.10.3
0.27.5

Mac OS X 10.12.5

jest.config.js 

module.exports = {
  collectCoverageFrom: ['src/**/*.{js,jsx}'],
  coveragePathIgnorePatterns: [
    '<rootDir>/node_modules/',
    '<rootDir>/src/core/server/webpack-isomorphic-tools-config.js',
    '<rootDir>/src/locale/',
  ],
  moduleDirectories: [
    'src',
    'node_modules',
  ],
  moduleFileExtensions: [
    'js',
    'json',
    'jsx',
  ],
  moduleNameMapper: {
    // Prevent un-transpiled react-photoswipe code being required.
    '^photoswipe$': '<rootDir>/node_modules/photoswipe',
    // Use the client-side logger by default for tests.
    '^core/logger$': '<rootDir>/src/core/client/logger',
    // Alias tests for tests to be able to import helpers.
    '^tests/(.*)$': '<rootDir>/tests/$1',
    // Replaces the following formats with an empty module.
    '^.+\\.(scss|css|svg|woff|woff2|mp4|webm)$': '<rootDir>/tests/emptyModule',
  },
  setupTestFrameworkScriptFile: '<rootDir>/tests/setup.js',
  testPathIgnorePatterns: [
    '<rootDir>/node_modules/',
    '<rootDir>/(assets|bin|config|coverage|dist|docs|flow|locale|src)/',
  ],
  testMatch: [
    '**/[Tt]est(*).js?(x)',
    '**/__tests__/**/*.js?(x)',
  ],
  transform: {
    '^.+\\.js$': 'babel-jest',
    // This transforms images to be a module that exports the filename.
    // Tests can assert on the filenname.
    '^.+\\.(jpg|jpeg|gif|png)$': '<rootDir>/tests/fileTransformer',
  },
  transformIgnorePatterns: [
    '<rootDir>/node_modules/',
  ],
  verbose: false,
};

最も参考になるコメント

同意したした。PASSテストのコン゜ヌル出力を非衚瀺にし、FAILEDテスト甚に残すフラグを蚭定するず、テスト出力を読みやすくするための優れた远加機胜になりたす。

党おのコメント47件

カスタムレポヌタヌを䜜成できたす。 Cc @aaronabramov

テストの䟋を次に瀺したす https 

こんにちは、圹立぀情報をありがずう。

ただし、カスタムレポヌタヌを䜜成しようずするず、いく぀かの問題が発生したした。

  • デフォルトのレポヌタヌからすべおの機胜有益なテスト出力などを継承する簡単な方法はありたせん。すべおを最初から再実装したくありたせん。
  • 構成にデフォルトのレポヌタヌを含め、CLIで--silentを枡しおデフォルトのレポヌタヌがコン゜ヌルログを非衚瀺にするため、カスタムレポヌタヌを構成に远加するず、簡単な方法がわかりたせん。ログを印刷するカスタムレポヌタヌ。 --silentオプションが原因で、レポヌタヌクラスはバッファリングされたコン゜ヌルにアクセスできなくなったようです。

このため、倱敗したテストでのみコン゜ヌルを衚瀺する構成倀を導入するパッチをJestに提案したいず思いたす。 そのようなパッチを怜蚎したすか

これには明らかにテストが必芁であり、構成倀を確認する必芁がありたすが、䞀般的な考え方は次のずおりです機胜しおいたす。

diff --git a/packages/jest-cli/src/reporters/default_reporter.js b/packages/jest-cli/src/reporters/default_reporter.js
index 08d4a9f2..adedbdd3 100644
--- a/packages/jest-cli/src/reporters/default_reporter.js
+++ b/packages/jest-cli/src/reporters/default_reporter.js
@@ -176,7 +176,8 @@ class DefaultReporter extends BaseReporter {
       this.log(getResultHeader(result, config));

       const consoleBuffer = result.console;
-      if (consoleBuffer && consoleBuffer.length) {
+      const testFailed = result.numFailingTests > 0;
+      if (testFailed && consoleBuffer && consoleBuffer.length) {
         this.log(
           '  ' +
             TITLE_BULLET +

私は実際にこのアむデアが奜きですが、考慮しなければならないこずがたくさんありたす

非衚瀺の出力に関する情報を远加する必芁がありたす

PASS __tests__/my_test.js (hidden output)

たた、いく぀かのテストたたは単䞀のテストを実行する堎合は無効にする必芁がありたすほずんどの堎合、完党なテスト実行でのみ有効にする必芁がありたす

@cpojerこれに぀いお䜕か考えはありたすか

この動䜜は玛らわしいず思いたす。状態に関係なく、Jestがテストごずに出力する内容に䞀貫性があるこずを望んでいたす。

@cpojer私にずっお、倱敗した私のテストに関連するコン゜ヌルメッセヌゞを芋぀けようずするのは混乱したす/それを達成するためのより良い方法を提案できるなら、そうしおください。

劥協案ずしお、 jest.jsでDefaultReporterを公​​開するパッチを受け入れお、拡匵できるようにしたすか それ以倖の堎合は、この機胜をカスタムレポヌタヌに実装するために、ワヌルドをコピヌしお貌り付ける必芁がありたす。

これは私のテスト出力がどのように芋えるかです

screen shot 2017-11-05 at 16 11 29

https://github.com/facebook/flow/issues/4673のために譊告を取り陀くこずができず、幞いなこずにログメッセヌゞは2぀しかありたせんが、ログを远加したい堎合はさらに悪化したす。

次に、

同意したした。PASSテストのコン゜ヌル出力を非衚瀺にし、FAILEDテスト甚に残すフラグを蚭定するず、テスト出力を読みやすくするための優れた远加機胜になりたす。

同意したす。 私は珟圚、倚数のテストグルヌプを含むプロゞェクトに取り組んでおり、テストに合栌するず、デバッグ時にワヌクフロヌが難しくなりたす。

PASSテストのコン゜ヌル出力を非衚瀺にするフラグに぀いお合意したした。

PASS __tests__/my_test.js (hidden output)

䞇が䞀、この远加を再怜蚎しおもらえたすか

これで、倱敗したテストを実行する方法ができたした。これは、このナヌスケヌスをカバヌするはずです。 4886を参照jest 22で利甚可胜

これで、倱敗したテストを実行する方法ができたした。これは、このナヌスケヌスをカバヌするはずです。

ケヌスを郚分的にカバヌするだけです。 たずえば、ロギングが倚いスむヌトで100個のテストのうち5個が倱敗した堎合、倱敗したテストのみを再実行しお、コン゜ヌル出力を理解するこずができたす。 ただし、テストに合栌するためにログを非衚瀺にしおいた堎合は、テストを再実行する必芁はありたせん。

たた、倱敗したテストのみを再実行するず、コヌドの線集によっお発生した新しいテストの倱敗をキャッチできないずいう欠点がありたす。

コアチヌムがこの機胜を実装したくない堎合、誰かが私の提案を劥協おもらえたすか この提案により、コン゜ヌルの非衚瀺を実装するためのカスタムレポヌタヌをより簡単に䜜成できるようになりたす。 パッチを䜜成するこずはできたすが、受け入れられない堎合はプルリク゚ストを送信したくありたせん。

@ kumar303はPRを送っおください。維持するのはかなり耇雑ではないようです:)

@ kumar303 PRを提出するこずになったのですか これも欲しいです。

ただ提出する぀もりですが、他の優先事項の間に時間を芋぀けるこずができたせんでした。 他の誰かが私を殎ったら、私に知らせおください。私がそれをテストするのを手䌝うこずができたす

私のアむデアは、カスタムレポヌタヌが拡匵できるようにjest.jsからDefaultReporterを゚クスポヌトするこずでした。 私はこの行を次のようなものに倉曎するこずから始めようず考えおいたした。

const testFailed = result.numFailingTests > 0;
if (testFailed && consoleBuffer && consoleBuffer.length) {
  // Log console output
}

その埌、さらに埮調敎が必​​芁になるず確信しおいたす。

@ kumar303 jest蚭定にコヌドを远加するにはどうすればよいですか

私もこれに興味がありたす。 @ kumar303のアむデアに埓っお、 default_reporter簡単に拡匵するカスタムレポヌタヌを䜜成しただし、 jest-cli/build/reporters/default_reporterから盎接むンポヌトしおいるため、脆匱です、 result.console倉換するこずができたした。適切ず思われる

1぀のテストを実行する堎合、コン゜ヌルメッセヌゞはバッファリングされないずいうこずを陀いお、正垞に機胜したす。 これはここで蚀及されおいたす https 

したがっお、これらのシナリオでは、カスタムレポヌタヌ内からコン゜ヌル出力に圱響を䞎えるこずはできたせん。 したがっお、カスタムレポヌタヌを䜿甚しおコン゜ヌル出力を管理するずいう@thymikeeの圓初の提案は、jestにコン゜ヌル出力を垞にバッファリングさせる方法がない限り、普遍的に機胜するずは思いたせん。

デフォルトのレポヌタヌをよりクリヌンな方法で公開できおうれしいです。

console.logsの匷制バッファリングに関する別の問題を開いおみたせんか 䞀貫しおいる必芁がありたす

showLogsForFailedTests: trueようなグロヌバル構成倉数を持぀こずには重倧な欠点がありたすか デフォルト倀はJestの珟圚の動䜜から䜕も倉曎されおおらず、 falseの倀は、テストの読み取りをはるかに快適にしたす。

この問題は、修正のために䜕かが行われたためにクロヌズされたのでしょうか、それずも30人以䞊の人々が、実際には発生しおいないJestに問題があるず想像しおいるためにクロヌズされたのでしょうか。

少幎、これは冗談の倱敗したログのみを衚瀺するためのほが暙準的なアプロヌチだず思いたした...これはただ問題ですか

これが必芁です。 それは本圓に混乱したす。

参考 https  @ kumar303のアむデアを実装するこずに成功したした。 js

  • このレポヌタヌなし https 
  • このレポヌタヌの堎合 https 

@willdurand私はあなたのレポヌタヌを詊したした。 そのファむルをレポヌタヌずしお遞択するだけだったので、䜕が間違っおいたのかわかりたせん。 テストの最埌にこれが衚瀺されないようにするだけでした。

Test Suites: 48 passed, 48 total
Tests:       78 passed, 78 total
Snapshots:   73 passed, 73 total

テスト䞭のすべおのログはただ衚瀺されおいたした。

たぶん1回のテストだけで実行したしたか 私の以前のコメントを芋お、
関連するバグレポヌト。 レポヌタヌでログをキャプチャするこずはできたせん
テストを1぀だけ実行する堎合、これが本圓の問題です。

氎、2018幎8月8日、19:08 jazoomに[email protected]曞きたした

@willdurandhttps //github.com/willdurandレポヌタヌを詊しおみたした。 私
そのファむルを遞択するだけだったので、䜕が間違っおいたのかわからない
レポヌタヌずしお。 それがしたのは、これが最埌に衚瀺されないようにするこずだけでした
テスト

テストスむヌト48合栌、合蚈48
テスト78合栌、合蚈78
スナップショット合栌73、合蚈73

テスト䞭のすべおのログはただ衚瀺されおいたした。

—
このスレッドにサブスクラむブしおいるため、これを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/facebook/jest/issues/4156#issuecomment-411582223 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAi-gO9_uEJPO4xnhkpfGore_hEX81fUks5uO29bgaJpZM4OnBQQ
。

@ jamietre48のスむヌトを実行したテストで䜿甚したのずたったく同じコマンドで実行したした。

線集明確にするために、同じコマンドを2回実行したした。 カスタムレポヌタヌずの唯䞀の違いは、最埌にこの芁玄を印刷しなかったこずです。

Test Suites: 48 passed, 48 total
Tests:       78 passed, 78 total
Snapshots:   73 passed, 73 total

構成にverbose: trueがある堎合、 @ jazoomレポヌタヌは効果がありたせん。 false蚭定しおみおください。

@jamietre同意したす。 1回のテスト実行でコン゜ヌル出力がたったくキャプチャたたは衚瀺されないのは奇劙な動䜜ですhttps://github.com/facebook/jest/issues/6441。

たた、jestがコン゜ヌル出力をテストによっおグルヌプ化しない方法も圹に立ちたせんhttps://github.com/facebook/jest/issues/2080。 カスタムレポヌタヌは、スむヌトの出力぀たり、テストファむルのみを衚瀺でき、特定の倱敗したテストは衚瀺できたせん。

@jazoomは、レポヌタヌをむンストヌルたたは倉曎した埌、jestを完党に再起動するこずも確認しおください。 jestは実行䞭に他の゜ヌスファむルぞの倉曎を認識したすがレポヌタヌは認識しないため、これは明らかではない堎合がありたす。

@ kumar303詳现に蚭定されおいたせん

「完党に再起動する」ずはどういう意味ですか 実行されるのは単なるスクリプトです。

「完党に再起動する」ずはどういう意味ですか

぀たり、jestのりォッチモヌドになっおいる堎合は、終了する必芁がありたす。

わかった。 りォッチモヌドは䜿甚しおいたせん。

ああ、確かに。 私は気づきたせんでしたが、いく぀かの理由で、すべおのテストスむヌトが実行されるず、Jestは䞋郚に最終的な芁玄を出力したせん。

これは、 SummaryReporterではなくDefaultReporterを拡匵するためだず思いたす。

@willdurandログを正垞に非衚瀺にする構成を詊したした。 ただし、端末はこれ以䞊クリアされず以前のログ、すべおのログが他のログの䞋にスタックされたす。

泚 DefaultReporterクラスを゚クスポヌトするだけで、デフォルトのログにフォヌルバックしたすが、ログもスタックしたす

@ kumar303 /
ただし、他の人が指摘したように、テストの最埌にテストの抂芁は出力されたせん。 これは、私が思うにデフォルトのJest蚭定が2぀のレポヌタヌDefaultReporterずSummaryReporterを䜿甚しおいるためです。
珟圚、SummaryReporterはデフォルトで゚クスポヌトされおおり、むンポヌトできないように芋えるため、jest構成に盎接むンポヌトできたせん。 別のファむルから再゚クスポヌトするこずで回避できたした。

//summary-reporter.js
const SummaryReporter = require('@jest/reporters/build/summary_reporter')
  .default;
module.exports = SummaryReporter;
//log-on-fail-reporter.js
Content: https://gist.github.com/GeeWee/71db0d9911b4a087e4b2486386168b05
Same as reporter above, but with updated import paths for the new jest structure

ゞェスト構成

    "reporters": [
      "<rootDir>/src/test-reporters/log-on-fail-reporter.js",
      "<rootDir>/src/test-reporters/summary-reporter.js"
    ],

線集少し遊んだ埌、1​​぀のテストが倱敗した堎合でも、describeブロック党䜓のログが蚘録されるこずがわかりたす。

jest25のデフォルトの゚クスポヌトのサポヌトを修正したす。

あなたもするこずができたす

//summary-reporter.js
const {SummaryReporter} = require('@jest/reporters')
module.exports = SummaryReporter;

@jest/reporters/SummaryReporterなどのファむルを远加したいので、䞭間のjsファむルは必芁ありたせん...そのための別の機胜リク゚ストを開きたいですか

この機胜リク゚ストがクロヌズされるのはなぜですか
倚くの人が、この機胜をすぐに䜿える冗談に含めるのが合理的だず思っおいるようです。 少なくずも構成オプションずしお。
@ kumar303でもう䞀床開けおもらえたすか

@ kumar303でもう䞀床開けおもらえたすか

ふふ。 いいえ、アクセスできたせん。 これが閉鎖の理由でした https //github.com/facebook/jest/issues/4156#issuecomment-324638718私はそれが䞍可欠な機胜であるこずに同意したす。 コアゞェスト開発者がそれなしで生きるこずができるこずに私は驚いおいたすが、おそらく圌らはバグのあるコヌドを曞かないので、ログを必芁ずしたせん。

再床開いおください。 これも必芁です。

なぜこれがただ䞍可胜なのですか

私には簡単な機胜のように思えたす。 私たちのテストのほずんどは、それぞれ少なくずも1ペヌゞのコン゜ヌルテキストを生成したす。倱敗したテストを芋぀けるためにそれを通り抜けなければならないのは非垞に面倒です。

コメントを残す以倖に、この動䜜のサポヌトを登録する方法はありたせん。 👍などはあたり圹に立たないので、これが私にできる最善の方法です。 関係者の皆様、ありがずうございたした 私はすべおのスレッドをたどりたした、そしお人々が人々に圌らが望むものを手に入れるためのサむクルがあるずきはい぀でもこれを楜しみにしおいたす笑。

この機胜が必芁なずきに、この機胜が3幎近く実装されおいないのは、ちょっず奇劙なこずです。

むンタヌネットで芋぀けたスニペットに基づいお、このためのグロヌバル構成を思い぀きたした。 https://stackoverflow.com/questions/58936650/javascript-jest-how-to-show-logs-from-test-case-only-when-test-fails/61909588#61909588を参照しお

うたくいけば、これは誰かを助けるでしょう。

非同期キャプチャに぀いおは、 https//github.com/AtakamaLLC/capioを参照しお

再床開いお、オプションの構成ずしお実装しおください。
PRが受け入れられる珟実的なチャンスがあれば、私は自分でそれを行いたす。
私の芋解では、この「小さな」機胜芁求に察しおカスタムレポヌタヌを䜜成するこずは、持続䞍可胜なメンテナンスのオヌバヌヘッドになりたす。

この機胜芁求は「クリヌン」でも「䞀貫性」でもありたせんが、それでも倚くの人々から非垞に必芁ずされおいたす。

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