2013-12-04 4 views
1

попытки несколько node.js файловой системы проверки (чтобы подтвердить, если среда функционирует нормально) Когда я пишу мой fs.unlink или fs.unlinkSync вне мокко он удаляет файл, как ожидалось:Могу ли я удалить файл из теста модуля мокко?

var fs = require('fs'); 

var newFile = new Date().getTime() +".txt"; 

fs.writeFile(newFile, "hello!", function (err) { 
    if (err) console.log(err); 
    // console.log("Created file: "+newFile); 
    fs.readdir(__dirname, function(err, list) { 
     // console.log(list) 
     console.log(list.indexOf(newFile) > -1) 
     fs.unlinkSync(newFile); 
     console.log('successfully deleted '+newFile); 
     // console.log("Deleted: "+newFile) 
     fs.readdir(__dirname, function(err, list) { 
      if (err) throw err; 
      console.log(list.indexOf(newFile) === -1); 
     }); 
    }); 
}); 

Но когда я пытаюсь точно же код из внутри мокко проверить это делает не удалить файл ...

var chai = require('chai'); 
var assert = chai.assert; 
var fs  = require('fs'); 

describe('Node.js Environment Checks', function(){ 
    describe('Basic IO', function(){ 
    it('CREATE (temporary) file tests create/write access to FS', function(){ 
     // setup 
     var newFile = new Date().getTime() +".txt"; 

     fs.writeFile(newFile, "hello!", function (err) { 
      if (err) console.log(err); 
      // console.log("Created file: "+newFile); 
      fs.readdir(__dirname, function(err, list) { 
       // console.log(list) 
       assert.isTrue(list.indexOf(newFile) > -1) 
       fs.unlinkSync(newFile); 
       console.log('successfully deleted '+newFile); 
       // console.log("Deleted: "+newFile) 
       fs.readdir(__dirname, function(err, list) { 
        if (err) throw err; 
        assert.isTrue(list.indexOf(newFile) === -1); 
       }); 
      }); 
     }); 
    }) 
    }) 
}) // end node env checks 

Я что-то не хватает ...?

Примечание: Я создал вопрос о GitHub: https://github.com/visionmedia/mocha/issues/1058
(Если я получаю ответ там сначала я отражу его здесь)

ответ

0

Использование асинхронной форму тестирования. Изменение it вызова, так что обратный вызов получает параметр done:

it('CREATE (temporary) file tests create/write access to FS', function(done){ 

И называют его в сокровенном асинхронном обратном вызове:

  fs.readdir(__dirname, function(err, list) { 
       if (err) throw err; 
       assert.isTrue(list.indexOf(newFile) === -1); 
       done(); 
      }); 
+0

Это * почти * решить эту проблему. (также предлагается @travisjeffery on github) В * дополнение * к ** done() ** обратный вызов мне пришлось изменить ** __ dirname ** на ** process.cwd **, чтобы убедиться, что я удаляю файл из текущего где скрипт запущен, а не корневой каталог. Благодаря! – nelsonic

+0

выше решение вместе с переименованием __dirname для process.cwd не работает – lonewarrior556

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