【问题标题】:Return value for asynchronous callback (in unit test)异步回调的返回值(在单元测试中)
【发布时间】:2015-12-23 22:37:18
【问题描述】:

我正在尝试对我的 node.js 项目进行 jasmine-node 单元测试。我需要获取一个文件路径数组,然后将该数组传递给单元测试。但是,由于这是异步的,所以我必须使用回调,并且无法返回数组。我不知道如何将检索到的数组发送到单元测试。

这是我的代码:

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);
    });
});

【问题讨论】:

    标签: javascript arrays node.js unit-testing asynchronous


    【解决方案1】:

    这样您就可以将数组发回。尚未测试,但应该可以。

     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
            });
        });
    });
    

    【讨论】:

    • 谢谢!那行得通。不过,起初我遇到了一些麻烦,因为gallery.walk() 没有按照与picArray 相同的顺序将数组发回,所以我仍然遇到错误。我必须通过files.sort()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    相关资源
    最近更新 更多