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?
Antwort
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.
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. –
- 1. Warum ist localStorage ["..."] undefiniert, aber localStorage.getItem ("...") ist null?
- 2. Befehlszeilenargumente während der Laufzeit
- 3. Warum ist Bedingung der während außerhalb des do während Umfang
- 4. undefiniert Index während der Index
- 5. Aufrechterhaltung der Ordnung während verschiedene
- 6. Ziehen während der Laufzeit
- 7. SIGILL in GetMethodID während "Evaluate Ausdruck" ist in Ordnung
- 8. Inkonsistente Segmentierungsfehler während der Laufzeit
- 9. C# Windows Form Anwendung ist während der Laufzeit gesperrt
- 10. Bildlaufleiste nicht während der Laufzeit
- 11. Halte Ordnung während
- 12. Haskell - Eingabe während der Laufzeit
- 13. Ändern der Kafka-Aufbewahrungsdauer während der Laufzeit
- 14. Warum ist NaN! = Undefiniert?
- 15. Warum wird während der Laufzeit ein [n] in c akzeptiert?
- 16. Anwendungskonfiguration während der Laufzeit einrichten
- 17. Warum ist Ordnung (Ordnung (x)) gleich Rang (x) in R?
- 18. Schleifen Variablen während der Laufzeit
- 19. TensorFlow: OOM während der Laufzeit
- 20. Warum ist x undefiniert?
- 21. Warum ist myVar undefiniert?
- 22. Firebase: Während des Tests erhalte ich „undefiniert ist keine Funktion“
- 23. Warum ist meine Variable in der for-Schleife-Anweisung undefiniert?
- 24. Warum verursacht eine fehlende Anmerkung während der Laufzeit keine ClassNotFoundException?
- 25. undefiniert Index während Datei hochladen
- 26. Warum Omnet ++ 4.6 Simulation während der Laufzeit stoppt?
- 27. Erstellen neuer Optionsfeldoptionen während der Laufzeit
- 28. Mehrdeutiger Referenzfehler während der Kompilierung der Laufzeit
- 29. Warum ist der UDP-Paketempfang während der Ausführung scheinbar optimiert?
- 30. Warum ist virtuell erlaubt während der Implementierung der Schnittstellenmethoden?
'require' funktioniert in einer Node.js-Umgebung. Ist das dein Fall? Das nennst du überhaupt nicht. – Ksyqo
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? –