如何在测试时抑制console.log消息?

时间:2014-11-26 12:10:10

标签: javascript node.js mocha

我有一个我想测试的工具:

var util = function(data) {
    .....
    console.log('msg');
    ....
    return true
}

我的test.js

describe('util', function () {
    it('should ...', function () {
        expect(util({})).to.be.true;
    });
});

如何在测试期间避免'msg'输出而不更改util?

2 个答案:

答案 0 :(得分:1)

最好使用像温斯顿这样的东西,否则你将不得不使用条件。

我有一个小实用程序,首先我将展示如何使用它然后我将显示代码;

ifEnvironmentIs('production').log('msg'); //Prints message only in production
ifEnvironmentIs('test').or('staging').log('msg'); //only in test and staging

代码就像这样

function environmentIs(desired) {
    if(!Array.isArray(desired)) {
        desired = [desired];
    }

    return desired.indexOf(NODE_ENV) > -1;
}

function ifEnvironmentIs(desired) {
    desired = [desired];
    var that = {};

    that.then = function(fn) {
        if(environmentIs(desired)) {
            fn();
        }

        return that;
    };

    that.or = function(env) {
        desired.push(env);
        return that;
    },

    that.otherwise = function(fn){
        if(!environmentIs(desired)) {
            fn();
        }

        return that;
    };

    that.log = function(text) {
        if(environmentIs(desired)) {
            console.log(text);
        }

        return that;
    };

    return that;
}

它基于环境变量工作,这是区分运行环境的最佳方式,如TEST,PRODUCTION和DEVELOPMENT

您还可以使用提供的代码通过.then.otherwise函数有条件地执行功能。

您可以扩展此代码以包含自定义日志记录方法(而不是控制台)

答案 1 :(得分:1)

我对摩卡不太了解,但这会有用吗?

describe('util', function () {
    it('should ...', function () {
        var logg = console.log;

        console.log = function(m){};

        expect(util({})).to.be.true;

        console.log = logg;
    });
});