クライアントJavaScriptのテストにはmocha-phantomjsを使え

mocha-phantomjsは、その名前の通りmochaとphantomjsを使ってクライアントJSのテストができるヘッドレステストランナー。長く使ってるけど特に不満はないので使えばいいと思う。

metaskills/mocha-phantomjs https://github.com/metaskills/mocha-phantomjs

ケルトンを作った

クライアントJSのテスト書かれない理由として、環境構築の難しさがあると思う。 そこで怠惰な人たちの為にGruntでプロジェクト用スケルトンを作った。ごじゆうにおつかいください

使い方

git clone git@github.com:mizchi/client-app-skeleton.git
cd client-app-skeleton
npm install
bower install
grunt test

結果

Running "mocha_phantomjs:all" (mocha_phantomjs) task
2014-02-11 15:24:31.105 phantomjs[61680:507] *** WARNING: Method userSpaceScaleFactor in class NSView is deprecated on 10.7 and later. It should not be used in new applications. Use convertRectToBacking: instead. 


  foo
    ✓ should return 


  1 passing (4ms)

二種類ある

mizchi/client-plugin-skeleton mizchi/client-app-skeleton

Client App Skeleton

自分がエンドポイントの、普通のアプリを書く用のスケルト

Client Plugin Skeleton

クライアントで組み込まれる用のスケルトン。たとえばjQueryやBackboneみたいなプラグインを提供する用。 テストと、サンプルプロジェクトをかけるようにした。

構成要素

  • browserify
  • bower
  • mocha-phantomjs

はやりの要素でつくりました

gruntfile.coffeeのサンプル

これは clinet app skeleton の gruntfile.coffee

module.exports = (grunt) ->
  grunt.loadNpmTasks 'grunt-bower-concat'
  grunt.loadNpmTasks 'grunt-mocha-phantomjs'
  grunt.loadNpmTasks 'grunt-browserify'
  grunt.loadNpmTasks 'grunt-este-watch'
  grunt.loadNpmTasks 'grunt-contrib-connect'
  grunt.initConfig
    bower_concat:
      all:
        dest: 'public/vendor.js'
        dependencies:
          'chai-jquery': ['jquery','chai']
        bowerOptions:
          relative: false

    browserify:
      app:
        files:
          'public/all.js': [
            'app/**/*.coffee'
          ]
        options:
          transform: ['coffeeify']

      test:
        files:
          'test/assets/test.js': [
            'test/**/*.coffee'
          ]
        options:

          transform: ['coffeeify']

    mocha_phantomjs:
      options:
        reporter: 'spec'
      all: ['test/assets/test.html']

    esteWatch:
      options:
        dirs: ['app/**/', 'test/**/']
      coffee: (filepath) ->
        console.log filepath
        ['build', 'test']

    connect:
      app:
        options:
          port: 8888
          base: 'public'

  grunt.registerTask "build", ["bower_concat", "browserify"]
  grunt.registerTask "default", ["build"]
  grunt.registerTask "test", ["build", "mocha_phantomjs"]
  grunt.registerTask "server", ["connect", "esteWatch"]

gulpを使わなかった理由

諸々のほしいものがなかった。自分で作る必要があるのでめんどい。