【Grunt + Karma + Jasmine】CoffeeScriptの開発環境を構築する

Grunt + CoffeeScript + Karma + Jasmine での開発をスタートして数ヶ月たった. ある程度ノウハウも溜まってきたので,メモしておく. CoffeeScript関連ライブラリをセットアップ $ npm init $ npm install $ npm install coffee-script --save-dev $ npm install grunt --save-dev $ npm install grunt-contrib-coffee --save-dev $ npm install grunt-contrib-concat --save-dev $ npm install grunt-contrib-uglify --save-dev $ npm install grunt-contrib-watch --save-dev プロダクトコード # src/hello.coffee hello = -> console.log("Hello world!!") # src/main.coffee hello() user = new User("Tanaka", 24) console.log(user.profile()) # src/user.coffee class User # static private param _uid = 987654321 # constructor constructor: (@NAME, @age) -> # public method profile: -> return @NAME + " : " + @age # private method _toAge = -> @age++ Gruntfile....

パラメタライズドテストケースをGoogleSpeadsheetで管理する

**google-spreadsheets-parser**を使って, スプレッドシートで管理しているデータをテストで使用する. 背景:データの二重管理をなくしたい あるJSモジュールのパラメタライズドテストコードを書いていた. パラメータとそのテスト結果はGoogleSpreadsheetで表管理していて,ビジネス・エンジニア共に使用していた. はじめはSpreadSheet上にそれらの値をJSで扱える形式にconcatenateとかしてコピペしていたが, バリエーションが膨大になり,データ二重管理の問題が発生しメンテナンスに難があった. 普通にパラメタライズドテストを書くとこんな感じ grunt x karma x jasmine の環境構築手順はこちら. # src/user.coffee class User constructor: (@NAME, @age) -> canDrink: -> parseInt(@age) >= 20 # src/userSpec.coffee describe "User", -> describe "#canDrink", -> assertCanDrink = (name, age, canDrink) -> it "Age:#{age}, CanDrink:#{canDrink}", -> user = new User(name, age) expect(user.canDrink()).toBe(canDrink) # ここのバリエーションが増えてくると管理がツラい target = [ {no: 1, name: 'User1', age: 18, canDrink: false} {no: 2, name: 'User2', age: 19, canDrink: false} {no: 3, name: 'User3', age: 20, canDrink: true} {no: 4, name: 'User4', age: 21, canDrink: true} {no: 5, name: 'User5', age: 22, canDrink: true} ] for t in target assertCanDrink(t....