4

次の CoffeeScript コードがあると考えてください。

class Foobar
    test: (path) ->
        fs = require 'fs'
        fs.readFile path, (err, data) ->
            console.log 'fs.readFile callback fired'

root = exports ? window
root.Foobar = Foobar

Mocha の次のテスト ファイル:

chai = require 'chai'
expect = chai.expect
chai.should()

{Foobar} = require '../source/foobar'

describe 'Foobar', ->
    foobar = null
    it 'does nothing', ->
        foobar = new Foobar
        foobar.test 'foobar.txt'

私はテストを実行します:

mocha --compilers coffee:coffee-script -R spec

奇妙なことに、コンソールは何もログに記録しません。Coffee をこれに変更すると (最後に 2 行追加):

class Foobar
    test: (path) ->
        fs = require 'fs'
        fs.readFile path, (err, data) ->
            console.log 'fs.readFile callback fired'

root = exports ? window
root.Foobar = Foobar

foobar = new Foobar
foobar.test 'foobar.txt'

テストを実行すると、予想どおり、コンソール ログfs.readFile callback firedが 2 回記録されます。

では、なぜ最初のケースでコンソールが空だったのでしょうか?

4

1 に答える 1

4

readFileコールバックが実行される前にテストが終了している可能性があります。testメソッドはコールバックを受け入れる必要があります。

class Foobar
    test: (path, callback) ->
        fs.readFile path, (err, data) ->
            console.log 'fs.readFile callback fired'
            callback err, data

このようにして、非同期で実行するテストを作成できます。

it 'calls callback', (done) ->
    foobar = new Foobar()
    foobar.test 'foobar.txt', done
于 2012-08-10T00:26:22.303 に答える