Jestでテストを書いているとき、標準出力(console.log()
など)を使ってデバッグしたいことがあります。しかし、テストが増えると、標準出力のログが増えて、必要な情報が見づらくなってしまいます。
この記事では、『Jestのテストで標準出力(console.log()など)を非表示にする方法』をシンプルなサンプルコードを用いてわかりやすく説明します。
Jestのテストで標準出力が出る場合
まず、Jestでのテスト実行時に標準出力が出る場合について説明します。一例として、以下にテスト対象ファイル(add.js
)とテストファイル(add.test.js
)を示します(各ファイルには、デバッグのためにconsole.log()
などの標準出力をコードに埋め込んでいます)。
add.js
function add(a, b) {
console.log('log');
console.info('info');
return a + b;
}
module.exports = add;
add.test.js
const add = require('./add');
test('adds 1 + 2 to equal 3', () => {
console.log('test log');
console.info('test info');
expect(add(1, 2)).toBe(3);
});
このコードをnpx jest
で実行すると、標準出力にログが表示されます。テストが多くなると、このようにログが見づらくなってしまいます。
$ npx jest
console.log
test log
at Object.log (add.test.js:6:11)
console.info
test info
at Object.info (add.test.js:7:11)
console.log
log
at log (add.js:2:11)
console.info
info
at info (add.js:3:11)
PASS ./add.test.js
√ adds 1 + 2 to equal 3 (29 ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 0.385 s, estimated 1 s
Ran all test suites.
標準出力(console.xxx())を非表示にする方法
標準出力(console.log()
など)を非表示にする方法を以下に示します。どちらの方法でも構いません。目的に応じて使い分けましょう。
- 方法1:
--silent
オプションを使う - 方法2: 標準出力(
console.xxx()
)をモックする
方法1: --silentオプションを使う
Jestには--silent
オプションがあり、テスト実行中の標準出力(console.log()
など)を抑制できます。
--silent
オプションを付けてテストをした結果を以下に示します。
$ npx jest --silent
PASS ./add.test.js
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 0.362 s, estimated 1 s
上記の実行結果から分かるように--silent
オプションを付けると標準出力が表示されなくなります。なお、npx jest --silent=true
やnpx jest --silent true
でも非表示にできます。
$ npx jest --silent=true
PASS ./add.test.js
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 0.353 s, estimated 1 s
補足
package.json
のスクリプトに--silent
オプションを追加することで、npm test
でテストを実行した際も標準出力を抑制できます。
"scripts": {
"test": "jest --silent"
}
方法2: 標準出力(console.xxx())をモックする
Jestの「setupFiles
オプション」または「setupFilesAfterEnv
オプション」で初期設定ファイルを指定し、そのファイル内でjest.spyOn
を使用してconsole.log()
などの標準出力をモックする方法もあります。
あわせて読みたい
setupFiles
とsetupFilesAfterEnv
は、Jestのテストを実行する前に特定の設定や処理を行いたい場合に使用する設定項目です。各オプションで指定したファイルがテストが始まる前に実行されます。
続きを見るsetupFiles
とsetupFilesAfterEnv
については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。 【Jest】setupFilesとsetupFilesAfterEnvとは?
まず、プロジェクトのルートにjest.setup.js
というファイルを作成し、以下のコードを追加します。
jest.setup.js
jest.spyOn(console, 'log').mockImplementation(() => {});
jest.spyOn(console, 'info').mockImplementation(() => {});
次に、プロジェクトのルートにjest.config.js
というファイルを作成し、以下のコードを追加します。今回はsetupFiles
オプションを用いています。
jest.config.js
module.exports = {
setupFiles: ['./jest.setup.js'],
};
これでnpx jest
でテストを実行すると、標準出力が表示されなくなります。
$ npx jest
PASS ./add.test.js
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 0.362 s, estimated 1 s
本記事のまとめ
この記事では『Jestのテストで標準出力(console.log()など)を非表示にする方法』について、以下の内容を説明しました。
- 標準出力を非表示にする方法
--silent
オプションを使うnpx jest --silent
で実行すると、標準出力を抑制できる。package.json
の"scripts"
にも設定可能。
- 標準出力をモックする
jest.setup.js
にjest.spyOn(console, 'log').mockImplementation(() => {});
などを追加。jest.config.js
でsetupFiles
オプションを設定する。
お読み頂きありがとうございました。