我正在测试一个由react-query支持的自定义钩子。当promise被拒绝时,我需要测试它的回滚行为。不幸的是,使用console.error的react-query日志拒绝了对控制台的承诺,这弄脏了我的测试输出。如何防止react-query将被拒绝的承诺记录为控制台错误?
发布于 2021-01-05 06:04:37
react-query有一个名为setLogger (used to be called setConsole)的方法,您可以使用它来实现这一点。
将来自react-query的所有控制台消息静音
setLogger({
log: () => {},
warn: () => {},
error: () => {},
});再次取消禁用react-query的步骤
setLogger(window.console);如果您只想静音某些级别,而不想静音其他级别,则可以通过设置空函数和window.console函数的任意组合。例如:
setLogger({
log: () => {},
warn: window.console.warn,
error: window.console.error,
});如果您只想为单个测试静音记录器,则可以在测试的开始和结束时进行这些调用。
如果您更愿意静音整个测试文件的记录器,您可以使用Jest的setup and teardown methods
beforeAll(() => {
setLogger({
log: () => {},
warn: () => {},
error: () => {},
});
});
afterAll(() => {
setLogger(window.console);
});如果您希望为套件中的所有测试静音记录器,您可以将调用添加到测试设置文件(例如,名为testSetup.js),然后将以下内容添加到jest配置中:
setupFilesAfterEnv: ['<rootDir>/testSetup.js'],我个人创建了一个辅助函数(TypeScript)用于我的测试:
export async function withMutedReactQueryLogger(
func: () => Promise<any>
): Promise<any> {
const noop = () => {
// do nothing
};
setLogger({
log: noop,
warn: noop,
error: noop,
});
const result = await func();
setLogger(window.console);
return result;
}我是这样使用它的:
test('test something', async () => {
await withMutedReactQueryLogger(async () => {
// write my test here
})
})https://stackoverflow.com/questions/65570462
复制相似问题