jestのsilentはCLIから一時的に解除できる

  • Jest
  • Testing
  • npm

この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。

package.jsonのtestスクリプトに--silentが付いてると、デバッグ中にconsole.logが全部消されて困ることがある。設定を書き換えずにその場だけ解除する方法があったのでメモ。

結論

--no-silentをCLIから渡せばいい。

ターミナル
npx jest --no-silent

npmスクリプト経由なら--を挟んで渡す。

ターミナル
npm test -- --no-silent
yarn test --no-silent

--silent=falseでも同じ効果。

なぜ動くか

jestのCLIはyargsベースで、bool系オプションは--no-<flag>で明示的に反転できる。jestのメンテナも「--no-silentは動くはず、動かなければバグ」とissueで回答してるので、公式に想定された使い方らしい。

ハマりどころ

npmスクリプトを二重にネストしてると効かないことがある。たとえばtest:silentスクリプト自体がjest --silentを含んでいて、それをさらにnpm run test:silent -- --no-silentのように上書きしようとするパターン。

Jest 25.1.0以降でこの挙動に関する不具合報告(jestjs/jest#9517)があって、期待通りにsilent: falseへ反転しない。直接jest --no-silentやnpx jest --no-silentを叩く分には問題なかった。

回避策としては、silentを付けないバージョンのスクリプトを別に用意しておくのが手っ取り早い。

{
"scripts": {
"test": "jest --silent",
"test:verbose": "jest"
}
}