All Articles

grunt.jsからファイル監視してbuster.jsでテストを自動化する話

先日(というか昨日ですね)のbuster.jsのエントリを読んで頂いた方が結構いたみたいでありがとうございます。 で、連日ですが。

grunt.jsを使ってみましょうか

私の環境がUbuntuなのでinotifyでいいやーMacの方ざんねーんっていうのもアレなので、grunt.jsで自動化する所もやってみたので参考程度にメモ。これならMacでもWIndowsでもできますかね(誰か試してくれると嬉しいです)。buster.jsやファイル構成については前回のエントリを参照してください。

grunt.jsのインストール

すでにインストールされてる方も多いでしょう。

``` npm install -g grunt ```

私の環境ではv0.3.17が入りました。gruntfileでやるやつじゃないですね。

設定とbusterタスクの追加

buster.jsと同じ階層に設定ファイルとしてgrunt.jsを追加(v0.4.xだとGruntfileになるかな?)。中身は以下のように書いて見ました。

module.exports = function(grunt) {

    grunt.initConfig({
        watch: {
            scripts: {
                files: [ 'src/*.js' ],
                tasks: 'buster'
            }
        },
        // "buster"というタスクを設定
        buster: {
            dist: {
                src: [ 'tests/*.js' ]
            }
        }
    });

    var proc = require('child_process'),
           dir  = process.cwd();

    // タスク追加
    grunt.registerMultiTask('buster', 'busterTest', function(data, name) {
	
        var done = this.async(),
               cmd  = 'buster test -e node --config ' + dir + '/buster.js';  // busterコマンド生成

        proc.exec(cmd, function(error, stdout, stderr) {

            if ( error || stderr ) {
                grunt.log.writeln('buster test failed.');
                done(false);
            } else {
                grunt.log.writeln(stdout);
                done(true);
            }
        });
    });
};

タスクの追加は以下のサイトを参考にさせて頂きました。ありがとうございます。というかそのまんまですね(;´Д`)

gruntで快適JS/CSSビルド生活 -Takazudo hamalog-

ともあれ、busterタスクを追加して、ファイルの変更を検知して、busterでテストを走らせます。ちょっとひと手間入りますね。。。 で、watch開始。

うんうん、こちらもファイル保存のタイミングでテストが走りますね!(∩´∀`)∩ grunt.jsのwatchがどんな機構でやってるかまでは見てないんですが、src/直下のファイルであれば同じように自動でテストできると思います。

まとめ

やっぱりクロスプラットフォームは大変ですね。 ただ、gruntでビルドやminifyまでやってる方もいると思いますので、そこにテストタスクが入れられれば捗るかもしれません。 Windows or Macで動いたなどの報告を頂ければ嬉しいです。