JavaScript
CoffeeScript
Haxe
mocha
testem

HaxeでFizzBuzz TDDをやってみる

More than 3 years have passed since last update.

環境構築

Haxe

IDEである FlashDevelop をインストールしておきます。

空のプロジェクトも作っておきましょう。

TDD

プロジェクト直下に移動して、以下のように進めます。

shell
$ npm install -g coffee-script
...
$ npm install -g mocha
...
$ npm install expect.js --save-dev
...
$ npm install -g testem
...
$ mkdir test
$ touch test/fizzbuzztest.coffee
$ coffee -cw test/fizzbuzztest.coffee &

これで、fizzbuzztest.coffeeが更新されると自動的にJavaScriptに変換してくれます。

次に、プロジェクト直下に testem.json というファイルを作ります。

testem.json
{
  "framework": "mocha",
  "src_files": [
    "bin/*.js",
    "test/*test.js"
  ],
  "launchers": {
    "Mocha": {
      "command": "mocha test/*test.js -R tap",
      "protocol": "tap"
    }
  },
  "launch_in_dev": [
    "Mocha"
  ]
}

testemを起動します。

shell
$ testem

これで、Haxeでコンパイルしたときやテストを更新したときに自動的にテストが走ります

テストを書く(レッド)

すいませんがいきなり最後まで書きます。

fizzbuzztest.coffee
expect = require 'expect.js'
fizzbuzz   = require '../bin/FizzBuzz.js'

describe 'fizzbuzz', ->

    f = new fizzbuzz.FizzBuzz # スコープから出したクラスを参照する

    it 'return string Fizz when 3 is given', ->
        result = f.returnString( 3 )
        expect( result ).to.be( 'Fizz' )

    it 'return string 2 when 2 is given', ->
        result = f.returnString( 2 )
        expect( result ).to.be( '2' )

    it 'return string Buzz when 5 is given', ->
        result = f.returnString( 5 )
        expect( result ).to.be( 'Buzz' )

    it 'return string Fizz when 6 is given', ->
        result = f.returnString( 6 )
        expect( result ).to.be( 'Fizz' )

    it 'return string Buzz when 10 is given', ->
        result = f.returnString( 10 )
        expect( result ).to.be( 'Buzz' )

    it 'return string FizzBuzz when 15 is given', ->
        result = f.returnString( 15 )
        expect( result ).to.be( 'FizzBuzz' )

    it 'return string FizzBuzz when 15 is given', ->
        result = f.returnString( 30 )
        expect( result ).to.be( 'FizzBuzz' )

実装する(グリーン)

FlashDevelopでFizzBuzzというクラスを作ります。

FizzBuzz.hx
package ;

@:expose( "FizzBuzz" ) // テストから見えるように、クラスをスコープから出す
class FizzBuzz{

    public function new() {

    }

    public function returnString(n : Int) : String {
        if ( n % 15 == 0 ) {
            return "FizzBuzz";
        }
        else if ( n % 3 == 0 ) {
            return "Fizz";
        }
        else if ( n % 5 == 0 ) {
            return "Buzz";
        }
        else {
            return Std.string(n);
        }
    }
}
Main.hx
package ;

import js.Lib;

class Main {

    static function main() {
        var f = new FizzBuzz();
        for (i in 1...100) {
            var s : String = f.returnString( i );
            trace( s );
        }

    }

}

これでできあがりです。

Windows_7.jpg

クラスを出すところが、ややハマりどころでした。

そういえばFizzBuzzって何?って方はググって下さい。筆無精で申し訳ないです。


ブログやってます:Weed Software