4
1

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 5 years have passed since last update.

gulpを使ってphpunitを自動化したときにハマったこと

Last updated at Posted at 2019-04-08

概要

vim使いながらもphpの開発を効率化したい!
コード修正してphpunitを動かすのが、ダルいなぁーと思って、gulpを使って自動化してみました。

要件

開発しながら、動的に何回でもテストが実行される環境を作りたい。

今回躓いた点

なぜか一度phpunitが実行されると、2回目以降phpunitが実行されない。
gulp-plumberを使ったりする記事は見かけて試したりはしてみたのですが、
うまくいかず。。。
きっともっと良い解決策があるかもなのですが、同じような問題で躓いた方がいたらと思い、
投稿させていただきます。

環境

php -version
PHP 7.1.23 (cli) (built: Nov  7 2018 18:20:35) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies

node --version
v11.12.0

準備

必要なmodule入れる

npm i --save gulp gulp-notify gulp-phpunit

gulpfile.jsを書く

'use strict';
var gulp = require('gulp');
var notify = require('gulp-notify');
var phpunit = require('gulp-phpunit');

gulp.task("test",function(){
    gulp.src('tests/*.php')
        .pipe(phpunit('vendor/bin/phpunit'))
        .on('error', notify.onError({
            title: "Gulp PHP Unit",
            message: "Error(s) occurred during testing..."
        }))
        .pipe(notify({
            title: "Gulp PHP Unit",
            message: 'Successfully ran test!'
        }));
});

gulp.task('watch',function(){
    gulp.watch(['src/**/*.php', 'tests/**/*.php'], gulp.task('test'));
});

実行

gulp watch

結果

画質荒くてすみません。。。(テストコードを書き換えたときにphpunitが動くことを確認しています)
gulp-once.gif

問題点

一回テスト実行するとそこで止まってしまう。。。
これだと、やりたいこととは違うんだ。。。
やりたいのは、開発しながら、何回でもphpunitを実行してくれる感じ。

解決策

chokidarを使う
です。

chokidarのinstall

npm i --save chokidar

gulpfile.jsの修正

'use strict';
var gulp = require('gulp');
var chokidar = require('chokidar');
var notify = require('gulp-notify');
var phpunit = require('gulp-phpunit');

var watcher = chokidar.watch(['src/**/*.php', 'tests/*.php']);

watcher.on('change', function(){
    gulp.src('tests/*.php')
        .pipe(phpunit('vendor/bin/phpunit'))
        .on('error', notify.onError({
            title: "Gulp PHP Unit",
            message: "Error(s) occurred during testing..."
        }))
        .pipe(notify({
            title: "Gulp PHP Unit",
            message: 'Successfully ran test!'
        }));
});

実行

node gulpfile.js

結果

2回目以降の修正でもちゃんとphpunitが実行されるようになった!
gulp-chokidar.gif

github

下記のリポジトリにソースを載せています。
phpunit-gulp

phpのコードとテストコードは、sampleとして下記のコードを使っています。
phpunit

参考資料

phperだってgulp使おうぜ!
gulp
chokidar

4
1
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
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?