带有 chai-spy 的单元测试节点脚本......被监视的函数未定义

Unit Testing Node Script with chai-spy ... function spied on is undefined

正在为我的第一个 gulp-插件编写我的第一个 node.js 测试....使用 mocha 和 chai。 ar errorCheckArg = spy(errorCheckArg); 我得到 TypeError: Cannot read property 'Assertion' of undefined。似乎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();
        });
    });
});

正在测试Gulpplugin/node脚本:

function foorbar(callback) {
    var destinationFile;
    errorCheckArg(arguments);
    return through2.obj(function(file, enc, next) {
    ...

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

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

}

您已将其设为私有函数。

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

如果不进行重构,您的选择是根据 errorCheckArg 对 foobar 输出的影响来测试它。如果保持仅调用函数的惯用语对我来说很重要,我就会这样做。