Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 摩卡咖啡没有';t在after()函数中调用rmdir_Javascript_Testing_Bdd_Mocha.js_Rmdir - Fatal编程技术网

Javascript 摩卡咖啡没有';t在after()函数中调用rmdir

Javascript 摩卡咖啡没有';t在after()函数中调用rmdir,javascript,testing,bdd,mocha.js,rmdir,Javascript,Testing,Bdd,Mocha.js,Rmdir,我尝试在测试之前创建一些目录树,然后将其删除: 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/

我尝试在测试之前创建一些目录树,然后将其删除:

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.log
s的顺序正常:

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

  before
after_before
․after
after_end


  ✔ 1 test complete (6 ms)
但它不调用rmdir()。相同的rmdir在
before()结尾时起作用。

控制台:

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

  before
after_before
 rmdir!
after
after_end

为什么在()之后的
中不起作用?

测试完成得太快。您需要使用after的异步版本

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

 after
 after_end
 rmdir!
当您从
before()
调用它时,它似乎起作用的原因是因为还有很多其他事情发生,所以会调用rmdir,但稍后当节点返回到事件循环时

 after
 after_end
 rmdir!