CoffeeScript
Node.js
mocha
grunt.js
chai

Mocha + Chai で CoffeeScript を Grunt で自動テスト

More than 5 years have passed since last update.

よくあるネタですが、覚書ということで。

ちなみに Grunt の環境は整っていること前提で進めていきます。


モジュールのインストール

次のコマンドを実行して、必要なモジュールをインストールしましょう。

おまけで CoffeeLint もいれてます。

$ npm install grunt-contrib-watch grunt-coffeelint grunt-contrib-coffee grunt-simple-mocha chai --save-dev

インストールしたモジュール


  • grunt-contrib-watch

  • grunt-coffeelint

  • grunt-contrib-coffee

  • grunt-simple-mocha

  • chai


プロジェクトの構成

ファイル構成は以下のとおりです。


  • PROJECT_DIR/


    • Gruntfile.coffee

    • src/


      • sample.coffee



    • test/


      • sample-test.coffee



    • lib/


      • sample.js ← 自動コンパイル






Gruntfile を用意

Gruntfile.coffee を作成し、以下のように記述してみましょう。

options とかは適宜変更してください。

module.exports = (grunt) ->

grunt.initConfig
pkg: grunt.file.readJSON 'package.json'
coffeelint:
app:
files:
src: [
'Gruntfile.coffee'
'src/**/*.coffee'
'test/**/*.coffee'
]
simplemocha:
all:
src: ['test/**/*.coffee']
options:
reporter: 'nyan'
ui: 'bdd'
coffee:
compile:
files:
'lib/sample.js': 'src/sample.coffee'
options:
bare: yes
watch:
scripts:
files: [
'Gruntfile.coffee'
'src/**/*.coffee'
'test/**/*.coffee'
]
tasks: [
'coffeelint'
'coffee'
'simplemocha'
]
options:
interrupt: yes

grunt.loadNpmTasks 'grunt-coffeelint'
grunt.loadNpmTasks 'grunt-simple-mocha'
grunt.loadNpmTasks 'grunt-contrib-coffee'
grunt.loadNpmTasks 'grunt-contrib-watch'

grunt.registerTask 'default', [
'coffeelint'
'coffee'
'simplemocha'
]


テストを書く

では test/sample-test.coffee にテストを書いてみましょう。

頭で require('chai').should() を実行してます。CoffeeScript では should を使うといい感じにテストがかけますね。

require('chai').should()

describe 'Mocha + Chai で CoffeeScript を Grunt で自動テスト', () ->

it '型のチェック', ->
string = 'string'
number = 1
string.should.be.a 'string'
number.should.be.a 'number'


watch を実行

Grunt でファイルの変更の監視を実行させましょう。

$ grunt watch


実行結果

Gruntfile.coffee の設定により、Gruntfile.coffee./src 配下、./test 配下、のファイルの変更を監視し、逐次 CoffeeLint、CoffeeScript のコンパイル、Mocha のテストを実行します。

実行結果は以下のとおり。

Reloading watch config...

Running "watch" task
Waiting...OK
>> File "Gruntfile.coffee" changed.

Running "coffeelint:app" (coffeelint) task
>> 1 files lint free.

Running "coffee:compile" (coffee) task
File lib/sample.js created.

Running "simplemocha:all" (simplemocha) task
1 -__,------,
0 -__| /\_/\
0 -_~|_( ^ .^)
-_ "" ""

1 passing (4ms)

Done, without errors.