我有一个我想测试的工具:
var util = function(data) {
.....
console.log('msg');
....
return true
}
我的test.js
describe('util', function () {
it('should ...', function () {
expect(util({})).to.be.true;
});
});
如何在测试期间避免'msg'输出而不更改util?
答案 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;
});
});