4

有什么方法可以监视 bunyan 日志以确保打印出我期望的内容?

我的文件.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);
       });
    });
})
4

3 回答 3

8

是的,使用Jest很容易:

let spyLogWarn = jest.spyOn(require('bunyan').prototype, 'warn')
// ...
expect(spyLogWarn).toHaveBeenCalled()
于 2018-07-06T08:57:46.740 回答
1

我使用以下方法解决了这个问题:

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];

有了这个,我可以断言它们等于我所期望的。

于 2018-07-06T09:16:46.567 回答
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);
于 2019-04-17T02:08:39.063 回答