2013-02-26 4 views
2

Я пытаюсь создать некоторое дерево каталогов перед испытаниями и удалить его после того, как все:Mocha не вызывает 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/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 с ОК:

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

    before 
after_before 
․after 
after_end 


    ✔ 1 test complete (6 ms) 

Но он не вызывает rmdir(). То же RmDir работает, когда это в конце before():

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()?

ответ

6

Тест проходит слишком быстро. Вы должны использовать асинхронную версию после.

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

Какой должна вывести:

after 
after_end 
rmdir! 

Причина, кажется, работает при вызове ее из before(), потому, что есть много других вещей происходит, так RmDir будет вызван, но позже, когда узел возвращается к циклу событий.

 Смежные вопросы

  • Нет связанных вопросов^_^