如何从mocha中的异步函数返回值并在函数中使用相同的值进行相同的描述?

时间:2015-07-09 21:04:30

标签: javascript node.js testing mocha

在编写代码时遇到问题。我想减少测试中使用的代码量,但是存在问题。

我有考试,但他没有工作:

var repeatTests = function(value){

    it ('test1 use value', function(done){
        console.log (value) // return undefined
        ...
    }

    it ('test2 use value', function(done){
       console.log (value) // return undefined
        ...
}

    ...

}

describe ('test', function(){

    var _value
    before(function(done){

        asyncFunction(function(err, value){
            ...    
            _value = value
            ...
            done();
        }

    })

    repeatTests(_value) // value is undefined


})

但这有效:

describe ('test', function(){

    var _value
    before(function(done){

        asyncFunction(function(err, value){
            ...
            _value = value
            ...

            done();
        }

    })

    it ('test1 use value', function(done){
        console.log(_value); // return _value
        ...
    }

    it ('test2 use value', function(done){
        console.log(_value); // return _value
        ...
    }

        ...


})

我知道为什么会这样。请告诉我,我该如何实现测试的第一个版本。

2 个答案:

答案 0 :(得分:0)

repeatTests函数与之前同时调用,因此将始终未定义。

答案 1 :(得分:0)

您可能想要使用async.waterfall。它看起来像这样:

var repeatTests = function(value){

    it ('test1 use value', function(done){
        console.log (value) // return undefined
        ...
    }

    it ('test2 use value', function(done){
       console.log (value) // return undefined
        ...
}

    ...

}

describe ('test', function(){

    var _value

    async.waterfall([
       before(function(done){

        asyncFunction(function(err, value){
            ...    
            _value = value
            ...
            done();
        }

    }),
    async.apply(repeatTests,_value) //Apply for passing the parameter to the repeatTests function
    ], 
    function(err){
       console.log('End of all');
    }
})