【问题标题】:Mocha doesn't call rmdir in after() functionMocha 不在 after() 函数中调用 rmdir
【发布时间】:2013-02-26 01:59:21
【问题描述】:

我尝试在测试之前创建一些目录树并最终将其删除:

require('should');
var fs = require('fs');
var rmdir = require('rmdir');

describe('FsWatcher', function() {
  before(function(done) {
    console.log("before");
    fs.mkdir('tmp');
    fs.mkdir('tmp/css');
    fs.mkdir('tmp/js');
    fs.mkdir('tmp/lib');
    fs.open('tmp/index.htm', 'w');
    // (...)
    console.log("after_before");
    done();
  });

  describe('single file', function() {
    it('should succed', function(done) {
      (1).should.equal(1);
      done();
    });
  });

  after(function() {
    console.log("after");
    rmdir('tmp', function() {
        console.log("rmdir!");
    });
    console.log("after_end");
  });
});

console.logs 的顺序没问题:

mocha `find tests -name '*.js'`

  before
after_before
․after
after_end


  ✔ 1 test complete (6 ms)

但它不调用 rmdir()。当它位于before() 的末尾时,相同的 rmdir 有效:

describe('FsWatcher', function() {
  before(function(done) {
    console.log("before");
    fs.mkdir('tmp');
    fs.mkdir('tmp/css');
    fs.mkdir('tmp/js');
    fs.mkdir('tmp/lib');
    fs.open('tmp/index.htm', 'w');
    // (...)
    console.log("after_before");
    rmdir('tmp', function(){
        console.log("rmdir!");
    });
    done();
  });
});

控制台:

mocha `find tests -name '*.js'`

  before
after_before
 rmdir!
after
after_end

为什么它在after() 中不起作用?

【问题讨论】:

    标签: javascript testing bdd mocha.js rmdir


    【解决方案1】:

    测试结束太快了。你需要使用after的异步版本。

    after(function(done) {
        console.log("after");
        rmdir('tmp', function() {
            console.log("rmdir!");
            done();
        });
        console.log("after_end");
    });
    

    应该输出:

     after
     after_end
     rmdir!
    

    当您从before() 调用它时它似乎工作的原因是因为还有很多其他事情发生,所以 rmdir 将被调用,但稍后当 node 回到事件循环时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-28
      • 2017-03-20
      • 1970-01-01
      相关资源
      最近更新 更多