Jest: 允许在测试中覆盖 console.error/warn/log

创建于 2017-03-31  ·  3评论  ·  资料来源: facebook/jest


您要请求功能还是报告错误
特征

当前的行为是什么?
由于BufferedConsole ,不可能覆盖console.errorconsole.logconsole.warnconsole.info

用例:我们希望能够让console.errorconsole.warn抛出错误并失败测试。

如果当前行为是一个错误,请提供重现的步骤以及通过https://repl.it/languages/jest的 repl.it 演示或 GitHub 上的最小存储库,我们可以yarn installyarn test

预期的行为是什么?
我希望如果我添加console.error = (message) => { throw new Error(message); }; (全局、在测试中或在 setupFiles/setupFramework 中),那么任何时候在测试中调用console.error都会引发错误并导致测试失败。

实际上,什么也没有发生。

请提供您的确切 Jest 配置并提及您的 Jest、节点、yarn/npm 版本和操作系统。

不适用

最有用的评论

使用模拟函数jest.fn()

console.warn = jest.fn(warn => {
  throw new Error(warn);
});

所有3条评论

使用模拟函数jest.fn()

console.warn = jest.fn(warn => {
  throw new Error(warn);
});

@thymikee这也没有按预期工作,使用全局设置文件:

"setupTestFrameworkScriptFile": "<rootDir>/tools/jest/setup-framework.js"

beforeEach(() => {
  console.error = jest.fn((error) => {
    throw new Error(error);
  });
});

在测试中:

const somePromiseThatLogsConsoleError = () => {
  return new Promise((resolve, reject) => {
    console.error('foobar');
    resolve();
  });
});

it('test that has console.error', () => {
  return somePromiseThatLogsConsoleError().then(() => {
    expect(false).toBeTrue();
  });
});

我刚试了一下,它奏效了:

// test file
test('lol', () => {
  return new Promise((resolve) => {
    console.log('lol');
    resolve();
  });
});
// setup file
global.console.log = () => {
  throw new Error('hey!');
};

结果:

 __tests__/test-test.js
  ✕ lol (3ms)

  ● lol

    hey!

      at CustomConsole.Object.<anonymous>.global.console.log (setup.js:2:9)
      at resolve (__tests__/test-test.js:3:13)
      at Object.<anonymous>.test (__tests__/test-test.js:2:10)
      at process._tickCallback (internal/process/next_tick.js:109:7)

Test Summary
 › Ran all tests.
 › 1 test failed, 0 tests passed (1 total in 1 test suite, run time 0.661s)
此页面是否有帮助?
0 / 5 - 0 等级