【问题标题】:Mocha, integration JS tests and asynchronous IOMocha,集成 JS 测试和异步 IO
【发布时间】:2014-02-16 07:01:15
【问题描述】:

我需要在集成测试之前创建一些文件:

before(function(done) {
    fs.mkdir('tmp');
    fs.mkdir('tmp/css');
    fs.mkdir('tmp/js');
    fs.mkdir('tmp/lib');
    fs.open('tmp/index.htm', 'w');
    fs.open('tmp/some.js', 'w');
    fs.open('tmp/some.css', 'w');
    fs.open('tmp/css/main.css', 'w');
    fs.open('tmp/css/sub.css', 'w');
    fs.open('tmp/js/main.js', 'w');
    fs.open('tmp/lib/jquery.js', 'w');
    done();
});

问题是,我得到了:

fs: missing callback Error: ENOENT, mkdir 'tmp/css'
fs: missing callback Error: ENOENT, mkdir 'tmp/js'
fs: missing callback Error: ENOENT, mkdir 'tmp/lib'
fs: missing callback Error: ENOENT, open 'tmp/css/main.css'
fs: missing callback Error: ENOENT, open 'tmp/css/sub.css'
fs: missing callback Error: ENOENT, open 'tmp/js/main.js'
fs: missing callback Error: ENOENT, open 'tmp/lib/jquery.js'

我认为问题在于,它会在创建目录之前尝试同步打开文件。我可以使用fs.mkdirSync 并向每个人传递一个回调,但是我遇到了done(); 的问题。如果我想让它以正确的方式完成,这段代码应该是什么样子?

【问题讨论】:

    标签: javascript node.js asynchronous mocha.js fs


    【解决方案1】:

    问题是它正在异步尝试打开文件,并在所有 fs 函数返回之前点击 done()。

    只需更改所有内容以使用 fs.mkdirSync 和 fs.openSync。 Sync 用于同步,因此您不需要回调;执行将暂停,直到 fs 返回。这在 Web 服务器中会很糟糕,所有其他工作都会停止,但在测试中很好。

    【讨论】:

      猜你喜欢
      • 2014-02-08
      • 2020-03-26
      • 1970-01-01
      • 1970-01-01
      • 2017-02-07
      • 1970-01-01
      • 2012-08-22
      • 2018-03-06
      • 2017-06-20
      相关资源
      最近更新 更多