2015-09-26 3 views
2

Я пытаюсь выполнить тестирование модуля жасмина-узла на моем проекте node.js. Мне нужно получить массив путей к файлам, а затем передать этот массив в модульный тест. Однако, поскольку это асинхронно, я должен использовать обратный вызов, и я не могу вернуть массив. Я не могу понять, как отправить полученный массив в модульный тест.Возвращаемое значение для асинхронного обратного вызова (в модульном тесте)

Вот мой код:

module.exports = { 
    results: [], 
    walk: function(){ 
     var nodeDir = require("node-dir"); 
     nodeDir.files(__dirname + "/public/img", function(err, files){ 
      if (err){ throw err; }  
      getData(files); 
     }); 
    }, 
    getData: function(files){ 
     console.log(files); 
     results = files; 
    } 
}; 

и вот мой блок тест:

var gallery = require("./server"); 

describe("Gallery", function() { 
    var picArray = [ 
     "/gallery/public/img/dir1/lizard-248705_1280.jpg", 
     "/gallery/public/img/dir1/loch-ness-151851_1280.png", 
     "/gallery/public/img/dir1/sand-lizard-63185_1280.jpg", 
     "/gallery/public/img/dir1/stegosaurus-24752_1280.png"]; 

    it("walks the images directory", function(){ 
     expect(gallery.walk()).toEqual(picArray); 
    }); 
}); 

ответ

0

Таким образом, вы можете отправить массив обратно. Не проверял его, но он должен работать. Тест

module.exports = { 
     results: [], 
     walk: function(callback){ //Added callback argument 
     var nodeDir = require("node-dir"); 
     nodeDir.files(__dirname + "/public/img", function(err, files){ 
      if (err){ throw err; }  
      callback(files); 
     }); 
     } 
}; 

Единица измерения:

var gallery = require("./server"); 

describe("Gallery", function() { 
    var picArray = [ 
     "/gallery/public/img/dir1/lizard-248705_1280.jpg", 
     "/gallery/public/img/dir1/loch-ness-151851_1280.png", 
     "/gallery/public/img/dir1/sand-lizard-63185_1280.jpg", 
     "/gallery/public/img/dir1/stegosaurus-24752_1280.png"]; 

    it("walks the images directory", function(done){ 
     gallery.walk(function(files){ //Pass callback to walk 
      //Your code here 
      done(); //ends the async test 
     }); 
    }); 
}); 
+0

Спасибо! Это сработало. Сначала у меня была небольшая проблема, так как 'gallery.walk()' не отправлял массив в том же порядке, что и 'picArray', поэтому я все еще получал ошибки. Мне пришлось пройти в 'files.sort()'. –

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