使用Mocha / Chai测试CoffeeScript时出现奇怪的fs.readFile行为

时间:2012-08-09 23:41:40

标签: node.js coffeescript mocha fs chai

请考虑我有以下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

奇怪的是我的控制台没有任何日志。当我将咖啡改为此时(最后添加两行):

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两次。

那么,为什么在第一种情况下控制台是空的?

1 个答案:

答案 0 :(得分: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