環境構築
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 );
		}
		
	}
	
}
これでできあがりです。
クラスを出すところが、ややハマりどころでした。
そういえばFizzBuzzって何?って方はググって下さい。筆無精で申し訳ないです。
ブログやってます:Weed Software
