Node.js 使用chai spy的单元测试节点脚本。。。监视的函数未定义

Node.js 使用chai spy的单元测试节点脚本。。。监视的函数未定义,node.js,unit-testing,gulp,mocha.js,chai,Node.js,Unit Testing,Gulp,Mocha.js,Chai,为我的第一个gulp插件编写我的第一个node.js测试…使用mocha和chai。I getTypeError:ar errorCheckArg=spy(errorCheckArg)无法读取未定义的的属性“断言”。似乎errorCheckArg功能在测试环境中不可用(我做了一个console.log(errorCheckArg),它显示了undefined) 知道我做错了什么吗 describe('gulp-foobar', function() { var fakeFile;

为我的第一个gulp插件编写我的第一个node.js测试…使用mocha和chai。I get
TypeError:ar errorCheckArg=spy(errorCheckArg)无法读取未定义的
的属性“断言”。似乎
errorCheckArg
功能在测试环境中不可用(我做了一个
console.log(errorCheckArg)
,它显示了
undefined

知道我做错了什么吗

describe('gulp-foobar', function() {
    var fakeFile;

    beforeEach(function() {
        var fakeFile = new File({
            contents: new Buffer('abufferwiththiscontent')
        });
    });

    describe('get files', function() {

        it('should do something', function(done) {
            var foo = function() { };
            foobar(foo);
            var errorCheckArg = spy(errorCheckArg);
            expect(errorCheckArg).to.have.been.called.with(arguments);


            done();
        });
    });
});

正在测试的Gulp插件/节点脚本:


如果errorCheckArg是foobar内部的一个函数,那么除非您以某种方式将其暴露给外部世界,否则您将无法监视它。如果是这样的话:

function foobar(callback) {
    errorCheckArg(arguments);
    .
    .
    .
    function errorCheckArg(args){};

}
你把它变成了私人活动

如果它足够重要,可以单独测试它,那么您需要以某种方式公开它,并且需要重构代码


如果不进行重构,您可以根据errorCheckArg对foobar输出的影响来测试它。如果保留只调用函数的习惯用法对我来说很重要,那我就是这么做的。

您需要以某种方式公开errorCheckArg以监视它。errorCheckArg位于foorbar内部的何处?是的,它位于
函数foorbar(callback){}
中,我在测试中使用
foorbar(foo)调用它
function foobar(callback) {
    errorCheckArg(arguments);
    .
    .
    .
    function errorCheckArg(args){};

}