首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当promise拒绝时,我如何静音react-query控制台错误?

当promise拒绝时,我如何静音react-query控制台错误?
EN

Stack Overflow用户
提问于 2021-01-05 06:04:37
回答 1查看 858关注 0票数 2

我正在测试一个由react-query支持的自定义钩子。当promise被拒绝时,我需要测试它的回滚行为。不幸的是,使用console.errorreact-query日志拒绝了对控制台的承诺,这弄脏了我的测试输出。如何防止react-query将被拒绝的承诺记录为控制台错误?

EN

回答 1

Stack Overflow用户

发布于 2021-01-05 06:04:37

react-query有一个名为setLogger (used to be called setConsole)的方法,您可以使用它来实现这一点。

将来自react-query的所有控制台消息静音

代码语言:javascript
复制
setLogger({
    log: () => {},
    warn: () => {},
    error: () => {},
});

再次取消禁用react-query的步骤

代码语言:javascript
复制
setLogger(window.console);

如果您只想静音某些级别,而不想静音其他级别,则可以通过设置空函数和window.console函数的任意组合。例如:

代码语言:javascript
复制
setLogger({
    log: () => {},
    warn: window.console.warn,
    error: window.console.error,
});

如果您只想为单个测试静音记录器,则可以在测试的开始和结束时进行这些调用。

如果您更愿意静音整个测试文件的记录器,您可以使用Jest的setup and teardown methods

代码语言:javascript
复制
beforeAll(() => {
  setLogger({
    log: () => {},
    warn: () => {},
    error: () => {},
  });
});

afterAll(() => {
  setLogger(window.console);
});

如果您希望为套件中的所有测试静音记录器,您可以将调用添加到测试设置文件(例如,名为testSetup.js),然后将以下内容添加到jest配置中:

代码语言:javascript
复制
setupFilesAfterEnv: ['<rootDir>/testSetup.js'],

我个人创建了一个辅助函数(TypeScript)用于我的测试:

代码语言:javascript
复制
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;
}

我是这样使用它的:

代码语言:javascript
复制
test('test something', async () => {
  await withMutedReactQueryLogger(async () => {
    // write my test here
  })
})
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65570462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档