chokidarとPHPUnitでファイル変更時にテストを走らせる方法
とあるライブラリを書いているときに毎回コマンドラインでcomposer testを打つのがめんどうなのでファイルの変更を検知して自動でテストを走らせるようにしました。
2021/08/16
#php
前提環境
- composer
- yarn
- PHP 7.4 (バージョンは動作した環境ですが PHPUnit が動けば大丈夫かと)
- node.js 12 系
インストール
PHPUnit
$ composer require --dev phpunit/phpunit
chokidar
$ yarn add -D chokidar
初回設定
PHPUnit
PHPUnit の設定は各自で
composer.jsonに追記
"scripts": {
"test": [
"./vendor/bin/phpunit"
]
},
chokidar.js
プロジェクトのルートに chokidar.js を作成
var { execSync } = require('child_process')
var chokidar = require('chokidar')
// chokidarの初期化
var watcher = chokidar.watch('./src/', {
// 監視する対象によって書き換える
ignored: /[\/\\]\./,
persistent: true,
usePolling: true,
interval: 1000,
})
watcher.add('./tests/') // 監視する対象によって書き換える
// イベント定義
watcher.on('ready', function () {
// 準備完了
console.log('ready watching...')
// ファイルの追加
watcher.on('add', function (path) {
console.log(path + ' added.')
runTest()
})
// ファイルの編集
watcher.on('change', function (path, stat) {
console.log(path + ' changed.')
runTest()
})
})
function runTest() {
try {
var cmd = execSync('composer test')
console.log(cmd.toString())
} catch (err) {
console.log(err.stdout.toString())
}
}
package.json に scripts を追加する
"scripts": {
"test:watch": "node chokidar.js"
}
実行
設定が完了したら下記のコマンドでファイル変更を監視して自動テストが走るようになる
$ yarn test:watch
参考
GitHub にもアップロードしてあります。