监视 bunyan 日志 - NodeJS
spying on bunyan log - NodeJS
有什么方法可以监视 bunyan 日志以确保打印出我期望的内容吗?
MyFile.js
const bunyan = require('bunyan');
const log = bunyan.createLogger({name: 'FailureAuditService'});
class someClass {
someFunct() {
if(x) {
log.warn('something happened');
}
}
}
测试
const service = require(../MyFile);
describe('test something', () => {
it('Will test the bunyan log', res => {
let consoleLog = sinon.spy(log, 'createLogger');
let x = true;
service.someClass(x).then(res => {
let expected = 'something happened';
consoleLog.should.equal(expected);
});
});
})
是的,使用 Jest 很容易:
let spyLogWarn = jest.spyOn(require('bunyan').prototype, 'warn')
// ...
expect(spyLogWarn).toHaveBeenCalled()
我通过以下方法解决了这个问题:
const mockReq = require('mock-require);
...
let infoStub = sinon.stub();
let warnStub = sinon.stub();
logStubs = {
info: infoStub,
warn: warnStub
// any other log methods you wish to use
};
mockReq('bunyan', {
createLogger() {
return logStubs;
}
});
...
我后来使用 mockReq.reRequire() 函数来重置我想要模拟的服务的缓存。
断言日志的实际内容:
let infoLog = infoStub.firstCall.args[0];
let warnLog = warnStub.firstCall.args[0];
有了这个,我可以断言它们等于我期望的任何值。
对于 Sinon 你可以这样写:
const bunyan = require('bunyan');
sinon.stub(bunyan.prototype);
// or
sinon.stub(bunyan.prototype, 'fatal');
// or
sinon.stub(bunyan.prototype, 'fatal').callThrough();
并在断言
sinon.assert.calledOnce(bunyan.prototype.fatal);
有什么方法可以监视 bunyan 日志以确保打印出我期望的内容吗?
MyFile.js
const bunyan = require('bunyan');
const log = bunyan.createLogger({name: 'FailureAuditService'});
class someClass {
someFunct() {
if(x) {
log.warn('something happened');
}
}
}
测试
const service = require(../MyFile);
describe('test something', () => {
it('Will test the bunyan log', res => {
let consoleLog = sinon.spy(log, 'createLogger');
let x = true;
service.someClass(x).then(res => {
let expected = 'something happened';
consoleLog.should.equal(expected);
});
});
})
是的,使用 Jest 很容易:
let spyLogWarn = jest.spyOn(require('bunyan').prototype, 'warn')
// ...
expect(spyLogWarn).toHaveBeenCalled()
我通过以下方法解决了这个问题:
const mockReq = require('mock-require);
...
let infoStub = sinon.stub();
let warnStub = sinon.stub();
logStubs = {
info: infoStub,
warn: warnStub
// any other log methods you wish to use
};
mockReq('bunyan', {
createLogger() {
return logStubs;
}
});
...
我后来使用 mockReq.reRequire() 函数来重置我想要模拟的服务的缓存。
断言日志的实际内容:
let infoLog = infoStub.firstCall.args[0];
let warnLog = warnStub.firstCall.args[0];
有了这个,我可以断言它们等于我期望的任何值。
对于 Sinon 你可以这样写:
const bunyan = require('bunyan');
sinon.stub(bunyan.prototype);
// or
sinon.stub(bunyan.prototype, 'fatal');
// or
sinon.stub(bunyan.prototype, 'fatal').callThrough();
并在断言
sinon.assert.calledOnce(bunyan.prototype.fatal);