Mochaではv7からtest/mocha.optsの設定ファイルが非推奨となっています。

mocha.optsファイルはCLIの引数をそのまま書ける設定ファイルです。

--require ts-node/register

mocha.optsファイルを利用すると次のようなDeprecation Warningが表示されるはずです。

(node:64389) DeprecationWarning: Configuration via mocha.opts is DEPRECATED and will be removed from a future version of Mocha. Use RC files or package.json instead.

Mocha v6からmocha.optsの代わりに.mocharc.jsonなどの設定ファイルがサポートされました。

.mocharc.{json,js,yml,yaml,cjs}など色々な拡張子がありますが、.mocharc.jsonなら次のような設定ファイルとなります。

{
  "require": [
    "ts-node/register"
  ]
}

このmocha.optsから.mocharc.{json,js,yml,yaml}へのマイグレーションを行うスクリプトを作りました

mocha-migrate

以下にソースがあります。

使い方は単純で、次のようにすれば、mocha.optsから.mocharc.jsonを作成します。

npx @azu/mocha-migrate migrate-opts -file ./test/mocha.opts -type json

それぞれの拡張子の対応は-typeで指定できます。

# mocha.opts to .mocharc.json
npx @azu/mocha-migrate migrate-opts -file ./test/mocha.opts -type json
# mocha.opts to .mocharc.js
npx @azu/mocha-migrate migrate-opts -file ./test/mocha.opts -type js
# mocha.opts to .mocharc.yml
npx @azu/mocha-migrate migrate-opts -file ./test/mocha.opts -type yml
# mocha.opts to .mocharc.yaml
npx @azu/mocha-migrate migrate-opts -file ./test/mocha.opts -type yaml

デフォルトでは作成だけですが、mocha.optsファイルを変換後に削除したい場合は-rmオプションをつけます。

npx @azu/mocha-migrate migrate-opts -file ./test/mocha.opts -type json -rm

monorepoのパッケージのまとめて変換したい場合は、lerna execなどを使えばまとめて変換できます。

./node_modules/.bin/lerna exec --no-bail npx @azu/mocha-migrate migrate-opts -- -file test/mocha.opts -type json -rm

参考: Migrate mocha.opts to .mocharc.(json|js|yml|yaml) · Issue #125 · secretlint/secretlint

このマイグレーションスクリプトは、mocha migrateとMochaにマイグレーションコマンドを追加するPRがベースです。

こういうユーザーにとって利益がない変更はできるだけツールが提供したほうがいいので、早くマージされてほしいですね。

同様の書式の変更(機能追加ではない)をやったhuskyの場合は、husky-upgradeというマイグレーションスクリプトを同梱していました。 同梱してるならDeprecatedWarningにマイグレーション方法も出せるので、そうして欲しかったという話でした。