gulpの基本的な使い方

gulpの基本的な使い方です。

インストールしていない場合はこちらを参考にインストールしてください。

プロジェクト直下にgulpfile.jsをとりあえずtouchコマンドか何かで作成します。(空ファイル)

gulpとgulp-mochaとchaiを使えばテストの自動化をすることができます。

さらにnycを使えばカバレッジレポートを出力することもできます。

gulpfile.jsの記述方法

gulpのメソッドについてです。

gulp.task(タスク名,function(){});

gulpfile.jsは基本的には、gulp.taskが主な記述方法になると思います。function内にさらにタスクを書いていったりすることができます。

以下、使用するモジュールです。

let gulp = require('gulp');
let mocha = require('gulp-mocha');
let seq = require('run-sequence');
let exec = require('child_process').exec;

run-sequenceモジュールはタスクを同期実行してくれます。

child_processはgulpファイル内で、javaやコマンドを実行したい場合に使用するモジュールです。

例えば、まずDynamoDBを起動、起動後テスト実行、テスト完了後DynamoDBを終了する、と言った感じです。

以下、記述例です。

let gulp = require('gulp');
let gulp-mocha = require('gulp-mocha');
let seq = require('run-sequence');
let exec = require('child_process');

gulp.task('unit', function() {
  seq(
      'startup',
      'test',
      'shutdown'
     ); // startup,test,shutdownの順に同期実行してくれます
});

gulp.task('startup',function() {
  exec('java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb -port 9999');// DynamoDB local起動
  return;
});

gulp.task('test' function() {
  return gulp.src(['./sample/**/*.*'], {read : false])
         .pipe(gulp-mocha(
             reporter : 'mochawesome',
             reporterOptions : {
               reportDir : './sample/report/',
               autoOpen  : true
             }
         ))
});

gulp.task('shutdown' function() {
  exec('taskkill /im java.exe /f');// DynamoDB local起動に必要なjava.exeをtaskkillします
  return;
}

DynamoDB localはJRE6以上が必要になります。なので、シャットダウンはjava.exeのプロセスを殺すことでシャットダウンと判断しています。

gulp.src(globs[, options])

globsにはglobもしくはglobの配列を指定します。optionsにはいくつかありますが、{read : falase}と言うように記述します。readオプションはfalseに設定すると、ファイルを読み込まず、nullとしてfile.contentsを返します。

参考サイト

gulpの実行方法

gulpの実行方法は簡単です。

gulp タスク名

とタイプします。上記の場合ですと

gulp unit

とタイプすれば同期実行してくれます。

nycも使う場合は以下のようにタイプするとレポート出力もしてくれます。

nyc gulp unit

同期実行時の注意

run-sequenceモジュールは同期する際に、各タスクのfunctionでreturnをするようにします。

これで確実に同期がとれるようです。

スポンサーリンク
  • このエントリーをはてなブックマークに追加
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA