ぽっちぽちにしてやんよ

技術ネタとかアプリに関する話とか

Coffee-scriptでpower-assertを使ったテストを書く

tl;dr

  1. @t_wadaさん神
  2. coffee-scriptでpower-assert使うときはespower-coffeeを使おう

あらすじ

ちょっと前に話題になっていたpower-assertを使ってみようとしました.

こんな感じのを用意しました.

1
2
3
4
5
6
7
8
9
10
assert = require 'power-assert'

describe 'array', ->
  beforeEach ->
    @arr = [1,2,3]
  describe '#indexOf()', ->
    it 'should return index when the value is present', ->
      zero = 0
      two = 2
      assert(@arr.indexOf(zero) is two)

んで

1
$ mocha --require intelli-espower-loader test/power-assert.coffee

みたいに実行したら

1
2
3
4
5
6
7
8
9
10
  array
    #indexOf()
      1) should return index when the value is present


  0 passing (4ms)
  1 failing

  1) array #indexOf() should return index when the value is present:
     AssertionError: false == true

あれ,,,ログがショボい,,,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  array
    #indexOf()
      1) should return index when the value is present


  0 passing (10ms)
  1 failing

  1) array #indexOf() should return index when the value is present:
     AssertionError: # /Users/pochi/Documents/development/(snip)/test/power-assert.js:16

assert(this.arr.indexOf(zero) === two)
            |   |       |     |   |   
            |   |       |     |   2   
            |   -1      0     false   
            [1,2,3]                   

[number] two
=> 2
[number] this.arr.indexOf(zero)
=> -1

こんな感じのを期待したのに!!

とか言ってたら@yosuke_furukawaが色々助言をくれて,こうなって

さらに中をみていくと

さらに色々調べてたら数カ月前の@mizchiの発言が

という感じで動作しない感じでした.

TypeScriptでの前例があるように

のようにgruntを使ってjsにコンパイルしてそれを食わせるという方法しか無いように思えた時に @t_wada 降臨.

そしてその翌日

espower-coffee が公開されてました!

使い方

1
2
$ npm install espower-coffee --save-dev
$ mocha --require 'espower-coffee/guess' test/**/*.coffee

grunt-mocha-testを使っているなら

1
2
3
4
5
6
7
8
9
mochaTest:
    options:
      reporter: 'spec'
      require: 'espower-coffee/guess'
      colors: true
      timeout: 10000
    src: [
      'test/power-assert.coffee'
      ] 

こんな感じ.compilers: 'coffee:coffee-script'は要らないみたいです.

すると

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  array
    #indexOf()
      1) should return index when the value is present
 
 
  0 passing (10ms)
  1 failing
 
  1) array #indexOf() should return index when the value is present:
     AssertionError: # /Users/pochi/Documents/development/(snip)/test/power-assert.coffee:15
 
assert(this.arr.indexOf(zero) === two)
            |   |       |     |   |   
            |   |       |     |   2   
            |   -1      0     false   
            [1,2,3]                   
 
[number] two
=> 2
[number] this.arr.indexOf(zero)
=> -1

こんなのが得られて,coffee-scriptでpower-assertが使えました!

ちなみに他のファイルとかはこんな感じでやりました.

注意点

  • coffee-scriptは1.7.1以上を要求します
  • coffee-errorsなどを併用するとショボいログに戻ります
  • AssertionErrorの行数が実際の.coffeeの行数ではありません.(多段SourceMap対応するまでは仕様とのこと)

Comments