目前,如果propType验证失败,ReactJS将使用console.warn发出警告。我真的很想在开发人员模式下遇到真正的错误,因此它可能会使我们的持续集成构建失败,而不仅仅是打印可能会在混洗中丢失的消息。

已经有对此的讨论,例如在this feature request中,并且此related question描述了预期的当前行为。很好,但是我个人希望它引发错误。

假设ReactJS不会为此提供更好的支持,那么的最佳解决方法是什么? 到目前为止,我想出的最好办法是覆盖console.warn进行测试,例如

console.warn = function(msg) {
    throw new Error(msg);
};

缺点是,在测试中实现起来可能很棘手,而且它不是特定于React的,因此还需要处理其他console.warn调用。

最佳答案

this answer中,您可以针对典型的React消息检查错误消息,并仅针对这些消息进行抛出。并不完美,但可能距离您要寻找的东西更近了:

let warn = console.warn;
console.warn = function(warning) {
  if (/(Invalid prop|Failed propType)/.test(warning)) {
    throw new Error(warning);
  }
  warn.apply(console, arguments);
};

10-07 21:13