请考虑我有以下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
两次。
那么,为什么在第一种情况下控制台是空的?
答案 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