我正在为NODE JS API编写测试用例。但是在NODE JS File的路由或服务中console.log()
存在的任何地方,都会打印到CLI。有没有办法模拟这些,以便这些不会在CLI中打印出来。
我已经探索了几个像Sinon,Stub这样的库来进行嘲弄。但无法掌握这些图书馆的工作。
答案 0 :(得分:0)
您可以完全覆盖功能:setVisible
。
答案 1 :(得分:0)
你可以按照将这些前/后块添加到测试中的方法做一些事情,但问题是mocha实际上使用console.log来打印关于测试结果的漂亮消息,所以你会失去那些< / p>
describe('Test Name', function() {
var originalLog;
beforeEach(function() {
originalLog = console.log;
console.log = function () {};
});
// test code here
afterEach(function() {
console.log = originalLog;
})
})
问题是您的输出看起来像
Test Name
X passing (Yms)
没有任何中间文字
答案 2 :(得分:0)
您不应该尝试模拟console.log本身,更好的方法是让您的节点模块获取日志记录对象。这允许您在测试期间提供替代(即模拟)。例如:
<my_logger.js>
module.exports = {
err: function(message) {
console.log(message);
}
}
<my_module.js>
var DefaultLogger = require('my_logger.js');
module.exports = function(logger) {
this.log = logger || DefaultLogger;
// Other setup goes here
};
module.exports.prototype.myMethod = function() {
this.log.err('Error message.');
};
<my_module_test.js>
var MyModule = require('my_module.js');
describe('Test Example', function() {
var log_mock = { err: function(msg) {} };
it('Should not output anything.', function() {
var obj = new MyModule(log_mock);
obj.myMethod();
});
});
这里的代码我简化了,因为实际测试不是这个例子的原因。仅仅是插入替代日志记录。
如果你有一个包含大量console.log调用的大型代码库,那么在为每个方法添加测试时,最好只更新代码。以这种方式使您的日志记录可插入使您的代码更容易,更容易接受测试。此外,还有许多可用于节点的日志记录框架。 console.log在开发期间很好,只是想要转出一些东西来看看发生了什么。但是,如果可能的话,尽量避免将其用作日志记录解决方案。
答案 3 :(得分:0)
我找不到仅隐藏要测试的模块中console.log
次调用的解决方案,并模拟测试框架调用的 none (在我的情况下是摩卡/柴)。
我想出了在应用代码中使用console
的副本:
/* console.js */
module.exports = console;
/* app.js */
const console = require('./console');
console.log("I'm hidden in the tests");
/* app.spec.js */
const mockery = require('mockery');
var app;
before(() => {
// Mock console
var consoleMock = {
log: () => {}
}
mockery.registerMock('./console', consoleMock);
// Require test module after mocking
app = require('./app');
});
after(() => {
mockery.deregisterAll();
mockery.disable();
});
it('works', () => {});