mocha.js と coffeescript で class のテスト ajax 非同期も。

2014年6月6日更新 view: 77 view
photoBy: http://sahhbrahhn.files.wordpress.com/2011/05/moc…

classをテストしたいんだけど、どうすればよいの?

テストする時の注意

非同期の中に非同期、つまり入れ子非同期にしていると処理に時間がかかる場合がある。
しか、デフォルトの設定では 2秒でタイムアウトしてしまうので、テストする時は、

mocha -R spec --timeout 5000 main.js

と言った感じで秒数を指定しよう。

test.coffee

まずは、 class を require して、PersonTmp に突っ込む。
で、PersonTmpの中にある Person を new

上記をやらないと読み込めない

PersonTmp = require("../../src/js/main")


describe "main", ->
describe "love", ->
    it "恋したら、好きって言う。", ->
     p = new PersonTmp.Person("hideki")
#     console.log(p.talk())
     assert.equal p.talk(), "hideki"
     return

    return

return
スポンサードリンク

main.coffee

#@マークは必須。これがないと外部から require した時に new できない
class @Person
constructor: (@name) ->
    this.name = @name
talk: ->
    return this.name

class 名の 頭に必ず @ をつける。

AJAXのテスト

node.jsで指定サイトのサイトタイトルを取得する

cheerio-httpcli は先にインストールしといてね。

main.coffee

request = require('request')
client = require('cheerio-httpcli')

##@マークは必須。これがないと外部から require した時に new できない
class @Person
constructor: (@name) ->
    this.name = @name
talk: ->
    return this.name

ajax: (url,callback) ->

    client.fetch url,
     q: "any"
    , (err, $, res) ->
     callback $("title").text()
     return

    return

test.coffee

assert = require("assert")
myModule = require("../../src/js/main")

describe "myModule", ->
describe "greetAsync", ->
    it "AJAXテスト", (done) ->
     p = new myModule.Person("hideki")
     p.ajax "http://www.yahoo.co.jp", (res) ->
        console.log res #Yahoo! JAPAN
        done()
        return
     return

    return
return

さらにサンプルどん

class をわざわざ new しなくても、共通で使える変数を用意し、beforeでnewして格納することで使いまわせる。

test.coffee

assert = require("assert")
myModule = require("../../src/js/main")



describe "myModule", ->

tarou = ""#全体で使える
Person = ""

before (done) ->
    console.log "全ての処理で最初に始まる"
    tarou = "おまんもーす"
    Person = new myModule.Person("hideki")
    done()


describe "ノーマル", ->

    it "ノーマルテスト", ->
     console.log(tarou)#おまんもーす
     assert.equal Person.talk(), "hideki"
     return

    return

describe "非同期", ->

    it "AJAXテスト", (done) ->
     Person.ajax "http://www.yahoo.co.jp", (res) ->
        console.log res #Yahoo! JAPAN
        assert.equal res, "Yahoo! JAPAN"
        done()
        return
     return

    return
return

テストの方法

http://code.kliu.org/cmdopen/

をダウンロードしインストール。
これで右クリックメニューからコマンドプロンプトを開ける。

テストしたい js があるフォルダを開く。
coffeescriptフォルダでは無いので注意。

mocha と入力してリターン

テスト完了しましたね!

スポンサードリンク

関連記事

関連カテゴリ