npm-scriptsで事前事後の処理を記述する
npm やその変種は package.json にスクリプトを記述できるのだが、例えばテストを実行するときに、前提としてRedisやDBなどが必要になる場合は多い。このとき手動や Makefile のレシピを作ってもいいのだけど、どうせなら npm だけで完結したい。
この場合、習慣としては test:services:start や test:services:stop を作っておいて、test から呼び出す形になる。
npm run test:services:start && ts-mocha ... && npm run test:services:stopなんだけど、こうすると ts-mocha に引数を渡すことができない。テストを実行する際にはテストケースを絞り込みたいことはよくあるので引数が渡せなくなるのは困る。こういった場合は pre または post プリフィックスを付けると事前と事後に実行してくれるスクリプトが書けるので、これを使うといい。
{ "scripts": { "pretest": "docker compose up -d", "posttest": "docker compose down", "test": "docker compose exec runner yarn test:run", "test:run": "ts-mocha --exit 'lib/*.spec.ts'" }}たとえば npm test — -g xxx とすると、実際のコマンドは以下のように実行される。
docker compose up -d # pretestdocker compose exec runner yarn test:run -g xxx # testts-mocha --exit 'lib/*.spec.ts' -g xxx # test:run (これはコンテナ内で動く)docker compose down # posttest