2016-12-02 2 views
-2

Also arbeite ich an Angular 2 App, die in TypeScript geschrieben wird, und schrieb einige Komponententests mit Jasmine (auch in TypeScript). Nach der Kompilierung werden alle Importe in require() übersetzt. Wenn ich meine App im Browser starte, funktioniert alles einwandfrei, aber wenn ich versuche, Unit Test mit karma auszuführen, heißt es Uncaught ReferenceError: require is not defined. Ich habe das gegoogelt und die Leute sagen, es liegt daran, karma läuft Test im Browser und Browser weiß nicht über require(), aber warum funktioniert es während der Laufzeit dann?Warum ist require() während Karma-Tests undefiniert, ist aber während der Laufzeit in Ordnung?

+2

'require' funktioniert in einer Node.js-Umgebung. Ist das dein Fall? Das nennst du überhaupt nicht. – Ksyqo

+0

So starte ich die App '" start ":" tsc && gleichzeitig "tsc -w \" lite-server \ "", "(diese Zeile ist in' package.json') und das ist die way tests starten "test": "tsc && gleichzeitig" tsc -w \ "karma start karma.conf.js", "(auch in' package.json'). Du meinst diesen "Lite-Server", richtig? –

Antwort

1

Update - so ziemlich die Antwort basierend auf geänderten Annahmen neu schreiben.

Wie Sie an anderer Stelle gefunden haben, ist der Grund, warum Karma-Tests fehlschlagen, require(), weil Karma den Test in einem Browser ausführt. require() wird von keinem der gängigen Browser unterstützt.

Sie fragen, in diesem Fall, warum funktioniert es zur Laufzeit? Die Antwort, basierend auf Kommentaren, ist, dass Sie zur Laufzeit nicht in einem Browser laufen. Sie laufen in node.js, die unterstützt Unterstützung require().

Wie ich in der ursprünglichen Version meiner Antwort festgestellt habe, existieren Tools wie webpack und browserify speziell, um Code zu ermöglichen, der require() verwendet, um in einem Browser zu laufen. Sie benötigen einige Einstellungen, wenn Sie also nicht in einem Browser laufen wollen, möchten Sie sich wahrscheinlich nicht mit ihnen anlegen.

Und deshalb möchten Sie Ihre Tests wahrscheinlich auch nicht in einem Browser ausführen, da Ihre Testumgebung so gut wie möglich zu Ihrer Laufzeitumgebung passen sollte. Nach meiner Erfahrung ist das wichtigste, was Karma Ihnen bietet, die Fähigkeit, Ihre Tests in verschiedenen Browsern auf automatisierte Weise auszuführen, aber wenn die Laufzeit, die Ihnen wichtig ist, ein Knoten ist, dann hilft Ihnen das nicht.

+0

Ich habe einige Informationen darüber gesehen, aber es scheint, als müsste ich eine riesige Menge an Konfiguration vornehmen, damit es funktioniert, während ich die App von 'npm' starte (Startzeile ist' "start": "tsc && gleichzeitig \ "tsc -w \" lite-server \ ",'), es funktioniert ok und ich muss nichts tun. –

Verwandte Themen