rubyを実行するgruntプラグイン作るまで(3) - テストの記述
rubyを実行するgruntプラグイン作るまで(2) - 非同期でのコマンド実行 - 1010realのブログ ver2の続きです。
以前作ったgrunt-cclogdeleteをもう少し汎用的にして、外部コマンドを非同期実行するgrunt-run-asyncを作成しました。 外部コマンドなら何でも良いので、rubyに限らず、色々指定できます。
上記をnpmに登録する前に行った、gruntプラグインのテストの記述について、やったことを書いていきます。
1.テストを書く
grunt-initテンプレートで作成された、テスト用フォルダの構成は以下の通り。
- test : テスト用ファイル置き場
- fixtures : タスク実行対象ファイル
- expected : タスク実行後の(期待する)結果
- xxxxx_test.js : テスト用js
- tmp : grunt testを実行すると作られる。タスク実行後の結果ファイルがここに出力される
grunt test
を実行すると、test/fixtures内のファイルを対象にタスクを実行し、結果をtmp配下に出力します。
その後、出力結果がtest/expected内のファイルと正しいかどうかでテスト通過判定しているので、その辺のつじつまを合わせてあげれば良い。
(「grunt testを実行してつくられるtmpフォルダの中身 == test/expectedの中身」となればテスト成功)
2.テストを通るまで機能をデバッグ
grunt testを繰り返し、Done, without errors.を目指す。
3.jshintを通す
デフォルトのgruntタスクを叩くと、jshint後に記述したテスト(grunt test)を実行する模様。
せっかくなら両方通したいので、jshintが通るように、jsを整理します。
ここで、nodeのバージョンを最新(v6.10.2)にあげたら、jshintでエラーがでたので、grunt-contrib-jshintモジュールを最新にあげました。
npm uninstall grunt-contrib-jshint --save-dev
npm install grunt-contrib-jshint --save-dev
で試したら、別のエラーがでました。
Promiseが定義されてないとのこと。jshintでes2015を許容しない設定になっているようです。
.jshintrcに以下のオプションを追加したら、問題なくjshintを通りました。
"esnext": true
最終的に、grunt test を実行し、jshint -> 用意したtest が全て通ればOKですね。
次回は、npmへの登録部分を書きます。
他のサイトに書いてあることをそのままやっただけなので、書くのはやめました。