deepblue-will’s diary

JS、CSS,Ruby、Railsなど仕事や趣味で試した技術系のことを書いていきます。

AngularのコードをCoffeeScript + power-assert + Karmaでテストしてみた

前回のエントリで、CoffeeScript + power-assert + (karma)のことを書いたのだけど、一番やりたかったAngularJSのプロジェクトでpower-assertが使えるかどうか確かめてみました。

ポイントは2点だけです。

サンプルの置いてあるリポジトリ

ポイント①:テスト対象はClassにする

テストコードからテスト対象を呼べるようにするために、テストするControllerやDireciveはClass(正確には違うけど)にする必要があります。

class TryPowerAssertController
  constructor: (@scope) ->
    @scope.getFizzBuzzStr = @getFizzBuzzStr

  getFizzBuzzStr: (i) ->
    if i % 15 == 0
      'FizzBuzz'
    else if i % 5 == 0
      'Buzz'
    else if i % 3 == 0
      'Fizz'
    else
      i.toString()

TryPowerAssertController.$inject = ['$scope']
angular.module('powerAssertApp', []).controller('TryPowerAssertController', TryPowerAssertController)

ポイント②:karma.confにangularをテスト時に読み込むように設定する

テスト実行時にangularがありませんって怒られるので、karma実行時にangularを読み込むようにします。
他のライブラリを使ってる場合はそれも読み込むようにします。

module.exports = (config) ->
    ...
    files: [
      'node_modules/power-assert/build/power-assert.js'
      'src/bower_components/angular/angular.min.js'
      'src/scripts/**/*.coffee'
      'test/**/*_test.coffee'
    ],
    ...

一応これで動きました。
これならテスト書くために特別なメソッドやおまじないとか覚える必要がないのでテスト書くハードルがかなり下がります。AngularJS Tutorial のテストコードなにやってんのかよく分からなかったので。。 でもDIするものが増えるとテスト書くのめんどくさくなりそうだなという気もしてます。。

AngularJSアプリケーション開発ガイド

AngularJSアプリケーション開発ガイド