2014-11-19 13 views
25

Gegenwärtig, wenn propType Validierung fehlschlägt, verwendet ReactJS console.warn, um eine Warnung auszugeben. Ich möchte wirklich, einen echten Fehler im Entwicklungsmodus haben, so dass es unseren kontinuierlichen Integrationsaufbau verfehlen kann, anstatt nur eine Nachricht zu drucken, die beim Mischen verloren gehen könnte.Force ReactJS echte Fehler zu werfen, wenn PropTypes Validierung fehlschlägt?

Es wurde bereits darüber diskutiert, z. in this feature request, und dieses related question beschreibt das aktuelle Verhalten wie erwartet. Das ist in Ordnung, aber Ich persönlich möchte es einen Fehler zu werfen.

Angenommen, ReactJS bietet keine bessere Unterstützung für diese bald, Was ist die beste Problemumgehung? Bis jetzt ist das Beste, was ich gefunden habe, console.warn für Tests, z.

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

Die Kehrseite der Medaille ist, es kann schwierig sein, in Tests zu implementieren, und es ist nicht Reagieren spezifisch, so dass andere console.warn Anrufe müssen auch behandelt werden.

+0

eine Vermutung von mir wäre, ein Grunt/Gulp-Plugin zu machen, um console.warn mit .error ersetzen? – zackify

+0

Haben Sie Neuigkeiten dazu? Ich möchte auch, dass die Validierung einen Fehler auslöst. –

+0

Ich ging mit dem Überschreiben von "console.warn" in der Entwicklung, mit einer Blacklist von Regex-Mustern, um auf Fehler zu überprüfen. Es war nicht elegant, aber funktionierte richtig, um meine Tests zu versäumen. – nrabinowitz

Antwort

4

FlowType, gestern von Facebook eingeführt, klingt genau nach dem, wonach Sie suchen. Es kann Ihren Code analysieren, Typen ableiten und Fehler zur Kompilierzeit ausgeben.

Es umfasst insbesondere die Unterstützung für Reagieren und das propTypes Argument: http://flowtype.org/docs/react-example.html#property-use

+0

Sieht interessant aus, obwohl ich immer noch versuche, die Abhängigkeiten herauszufinden. Ich werde es mir trotzdem anschauen, danke! – nrabinowitz

3

Von this answer, können Sie die Fehlermeldung gegen typische überprüfen Nachrichten reagieren und nur für diejenigen werfen. Nicht perfekt, aber vielleicht einen Schritt näher an dem, was Sie suchen:

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