javascript, node.js などにおいてテストコードを自分で書いたことがなかった人が学習した内容をまとめます。
「javascript テスト」と調べるとjasmine, JUnit, karma, ... 等々たくさん出てきてなにからすれば、どういう手順で導入する目的が見えるのかわかりづらいですね。
テストコードはできるだけ単純に coffee で書きたく、またテスト本体も coffee で書き始めるのにとっつきやすいものがあればよいのですが。
僕が調べた中で一番シンプルに導入できて、実際に使いたくなる手軽さがある手法は、gulp というビルドの自動化ツールから mocha を使うことです。
まず、テストコードを書きます。
sampleSpec.coffee
require 'should'
foo = require('../src/sample')
describe 'foo()', ->
it 'は引数ありなら正負を逆にした値を返す', ->
foo(9).should.equal -9
foo(-3).should.equal 3
it 'は0なら0を返す', ->
foo(0).should.equal 0
it 'は引数なしなら0を返す', ->
foo().should.equal 0
- 判定するために should を使います。Object.prototype を拡張して判定文をかけるようにしてくれていますね。
- Spec するモジュールを require して持ってきます。こんかいは foo
- describe -> it -> [ASSERTION] の構造で SPEC を書きます。
実装
さて、これを実現できそうなモジュールを作ります。失敗してもいいです。
sample.coffee
foo = (num = 0) -> return num * -1
module.exports = foo
環境構築
さて、spec でテストしたいのですが以下のものが必要になります。
$ npm init -y
$ npm i -D coffee-script gulp gulp-mocha should
mocha ってのは describe や it の構造化やテストの成否を拾ってくれるライブラリだと思います。
gulp 書きます。
gulpfile.coffee
gulp = require "gulp"
mocha = require "glup-mocha"
gulp.task "test", () ->
gulp.src ['spec/*.coffee']
.pipe mocha {reporter: 'spec'}
これで spec 内の spec が動きます。.coffee であっても動いてくれます。
やってみましょう。
$ gulp test
[15:11:15] Requiring external module coffee-script/register
[15:11:16] Using gulpfile ~/Works/0_/mocccha/gulpfile.coffee
[15:11:16] Starting 'test'...
foo()
✓ は引数ありなら正負を逆にした値を返す
✓ は0なら0を返す
✓ は引数なしなら0を返す
3 passing (12ms)
[15:11:16] Finished 'test' after 129 ms
できました
まとめ
- まずshould 拡張して、引っ張ってきたテストとなるモジュールを使って、describe>it>[ASSERTION] 構成でテストを書いてしまう。
- 適切なモジュールを作る。
- 環境を作って、gulpfile.coffee を書く。
簡単でよかった。