您要请求功能还是报告错误?
特征
当前的行为是什么?
由于BufferedConsole
,不可能覆盖console.error
、 console.log
、 console.warn
和console.info
。
用例:我们希望能够让console.error
和console.warn
抛出错误并失败测试。
如果当前行为是一个错误,请提供重现的步骤以及通过https://repl.it/languages/jest的 repl.it 演示或 GitHub 上的最小存储库,我们可以yarn install
和yarn 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);
});
@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)
最有用的评论
使用模拟函数
jest.fn()
: