13

我正在使用Karmamocha来测试我的React组件。当 PropTypes 不匹配时,我会显示一些警告。然而,让这些警告导致实际错误真的很有趣,以便跟踪测试并修复它。

你知道这是怎么做到的吗?

4

3 回答 3

18

您可以用console.warn自己的方法替换该方法,并在提供的消息与特定模式匹配时抛出。

let warn = console.warn;
console.warn = function(warning) {
  if (/(Invalid prop|Failed propType)/.test(warning)) {
    throw new Error(warning);
  }
  warn.apply(console, arguments);
};
于 2015-04-15T15:16:58.123 回答
10

Small improvements to accepted answer: console.error instead of console.warn as spain-train mentioned, added 'Failed prop type' to regex, as only then it works with React 15.3.1, and made the code more strict eslint friendly.

const error = console.error;
console.error = function(warning, ...args) {
  if (/(Invalid prop|Failed prop type)/.test(warning)) {
    throw new Error(warning);
  }
  error.apply(console, [warning, ...args]);
};
于 2016-09-28T16:10:48.943 回答
0

2021 年更新:

const consoleError = console.error;

console.error = function (...args) {

  if (/(Invalid prop|Failed propType|Failed .+ type)/.test(args[0])) {

    const errorMessage = args.reduce((p, c) => p.replace(/%s/, c));

    throw new Error(errorMessage);
  }

  consoleError.apply(console, args);
};

Failed prop type现在是Failed %s type: %s%s。它使用字符串替换来写入控制台。是 React 中的代码。

于 2021-04-16T16:18:29.697 回答