【问题标题】:How to test content of winston logger message in console如何在控制台中测试winston logger消息的内容
【发布时间】:2020-04-19 15:48:29
【问题描述】:

我正在使用 Winston 作为我的应用程序的记录器,并且我正在尝试为记录器消息编写单元测试(使用 Jest)。我特别想确保没有密码传递给我的日志。

由于记录器输出到stdout,我找不到访问我的winston.error 函数输出并在日志对象上运行我的断言的方法。

我尝试了几种不同的方法来访问记录器的结果,并在谷歌上搜索了解决方案,但没有取得多大成功。这是我的最后一次迭代:

我的 logger.js(内容参数在传递给记录器之前已经过清理):

export const error = (content) => {
  return winston.error(content);
};

还有我的 logger.spec.js:

const exampleLogs = { "email":"email", "password":"password" };

describe('Passwords are filtered out of Winston logger messages', () => {
  it('Should filter out password data from "error" level errors', () => {
    logger.error(exampleLogs);
    const result = jest.fn();
    expect(result).not.toHaveProperty('password');
  });
});

即使密码密钥就在那里,测试也通过了。当我console.log(result) 我得到一个模拟构造函数对象:

{ [Function: mockConstructor]
      _isMockFunction: true,
      getMockImplementation: [Function],
      mock: [Getter/Setter],
      mockClear: [Function],
      mockReset: [Function],
      mockRestore: [Function],
      mockReturnValueOnce: [Function],
      mockResolvedValueOnce: [Function],
      mockRejectedValueOnce: [Function],
      mockReturnValue: [Function],
      mockResolvedValue: [Function],
      mockRejectedValue: [Function],
      mockImplementationOnce: [Function],
      mockImplementation: [Function],
      mockReturnThis: [Function],
      mockName: [Function],
      getMockName: [Function] }

但我希望看到我的exampleLogs 对象...如何访问记录器发送到stdout 的对象?任何帮助将不胜感激!

【问题讨论】:

    标签: javascript jestjs winston


    【解决方案1】:

    要模拟您的 logger.error 函数,您必须在使用对象调用它之前将 jest.fn() 赋予它。但我想这不是你想要的,对吧?你不想改变记录器的行为,你只想检查它的调用。如果是这样的话,你想要一个间谍而不是一个模拟。

    但是还有另一种方法可以检查记录器的输出。考虑将文件传输添加到您的 winston 配置 (https://github.com/winstonjs/winston/blob/master/docs/transports.md)。然后读取文件并检查是否有预期的输出,然后删除文件。

    【讨论】:

    • 谢谢佩德罗!没错-我正在尝试获取记录器发出的实际结果。通常我的记录器推送到一个 splunk 类型的服务,但在本地它只是发送到标准输出。我认为您的运输想法可行,现在将阅读它并让您知道。谢谢!
    【解决方案2】:

    Pedro 的解决方案很棒。但是,我使用stream 作为传输将输出保存在内存中。然后,它更容易阅读,我不需要删除任何文件。

    你可以在这里找到一个例子:https://github.com/winstonjs/winston/issues/809#issuecomment-598966499

    【讨论】:

      猜你喜欢
      • 2018-06-10
      • 2017-08-15
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 2019-07-04
      相关资源
      最近更新 更多