0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Jest用のテストをそのままMochaで利用してみる

Posted at

はじめに

Jestで大量のテストを処理した時に、メモリリークの蓄積がひどいことになってしまいました。

そこで mocha-ui-jest を使って、テストはそのままにMochaへ移行してみることにしました。

テストはTypescriptで書かれてるものとします。

mocha-ui-jest とは

Mochaは、TDD(describe/it/before/beforeEach)や、BDD(suite/test/suiteSetup/setup) などの書き方を切り替えられるようになっています。

mocha-ui-jestはそれをJestのスタイルに合わせてくれて、Jestで使ってるexpectを使えるようにしてくれます。

要するにexpectを使ってる程度の簡単なテストなら、Mochaでも使えるようにしてくれます。

jestオブジェクトはありませんが、jest.setTimeout()jest.retryTimes()くらいなら、Jest用のsetupファイルに追い出して対応できるかと思います。

手順

インストール

まずは必要なモジュールをインストールします。

npm i -D mocha mocha-ui-jest ts-node tsconfig-paths cross-env

tsconfig.jsonの書き換え

typesmocha-ui-jestなどを追加します。

"types": ["mocha-ui-jest", "node"],

一部のテストのみでMochaを使いたい場合などは、Mocha用のtsconfigを用意してもいいでしょう。

tsconfig.mocha.json
{
  "extends": "./tsconfig",
  "compilerOptions": {
    "types": ["mocha-ui-jest", "node"]
  }
}

Mochaの設定ファイルを作る .mocharc.json

requiremocha-ui-jestを読み込んで、uijestを指定します。
tsconfig.jsonpathsを利用してる場合は、tsconfig-paths/registerrequireに追加してください。
それ以外の設定は各自のお好みでどうぞ。(mocha オプション)

.mocharc.json
{
  "require": ["mocha-ui-jest", "ts-node/register"],
  "ui": "jest",
  "reporter": "list",
  "parallel": true,
  "retries": 3,
  "timeout": 30000
}

タスクを追加

package.jsonscriptにタスクを追加します。
必要に応じて環境変数でts-nodeの設定をしてください。(ts-node オプション)
TS_NODE_FILES ― d.tsファイルを読み込ませる時に必要
TS_NODE_PROJECT ― tsconfig.jsonを指定する時に使う

  "mocha": "cross-env TS_NODE_FILES=true TS_NODE_PROJECT=tsconfig.mocha.json mocha \"test/**/*.test.ts\"",

実行

あとは実行するだけです。

npm run mocha

カバレッジをとる場合

少し試してみましたが、Mochaのparallelを無効化しないとダメでした。

nyc をインストール

npm i -D nyc

nycの設定

nyc.config.jsを作成します。

nyc.config.js
module.exports = {
  all: true,
  include: ['src/**/*.ts'],
  exclude: ['**/*.d.ts'],
  reporter: ['lcov', 'html', 'text'],
}

タスクを追加

package.jsonscriptにタスクを追加します。
parallelを無効化するために、--no-parallelを渡します。

  "mocha:coverage": "nyc npm run mocha -- --no-parallel",

実行

npm run mocha:coverage

まとめ

Jestでexpectを使ってる程度のテストなら、Mochaでもそのまま利用できることがわかりました。

Jestのテスト環境はなかなか特殊で、ある時突然地雷を踏んでしまうこともあるので、Mochaでもテストできる用意をしておくのはアリかもしれない。

リンク

mocha-ui-jest ― https://www.npmjs.com/package/mocha-ui-jest
mocha オプション ― https://mochajs.org/#command-line-usage
ts-node オプション ― https://github.com/TypeStrong/ts-node#cli-and-programmatic-options

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?