Npmスクリプトからバックグラウンドでhttp-server
を起動して、 jsdomを使用したモカテスト などの別のnpmスクリプトがhttp-server
に対してHTTPリクエストを作成できるようにする方法
http-server
パッケージがインストールされた場所:
npm install http-server --save-dev
package.json
ファイルには次が含まれます。
"scripts": {
"pretest": "gulp build-httpdocs",
"test": "http-server -p 7777 httpdocs/ && mocha spec.js"
},
npm test
を実行するとhttp-server
が正常に起動しますが、もちろん次のように表示された後にコマンドがハングします:
Starting up http-server, serving httpdocs/
Available on:
http://127.0.0.1:7777
http://192.168.1.64:7777
Hit CTRL-C to stop the server
Webサーバーを起動してMochaテストをブロックしない簡単な方法はありますか?
ボーナス:Mochaテストの実行後、http-server
をどのようにシャットダウンしますか?
最後に&
を追加することにより、プロセスをバックグラウンドで実行できます。そして、バックグラウンドプロセスを強制終了するために、npmが提供するpostscript
フックを使用します。
"scripts": {
"web-server": "http-server -p 7777 httpdocs &",
"pretest": "gulp build-httpdocs && npm run web-server",
"test": "mocha spec.js",
"posttest": "pkill -f http-server"
}
ただし、複数のhttp-server
を実行している場合はどうなりますか?
posttest
スクリプトでポートを指定することにより、プロセスを強制終了できます。
"posttest": "kill $(lsof -t -i:7777)"
現在、Windowsでは構文が異なり、npmは複数のOSスクリプトをサポートしていません。複数をサポートするための最善の策は、各OSを別々に処理する一口のタスクです。