Blog

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 にもアップロードしてあります。