2016-10-13 4 views
10

Ich benutze Angular-CLI (Webpack-Version) für mein Angular 2-Projekt und ich muss auch jQuery verwenden (leider. In meinem Fall ist es eine Abhängigkeit von Semantic-UI und ich verwende es für die Handhabung von Menü Dropdowns).Angular 2 und jQuery - wie testen?

So wie ich es bin mit:

npm install jquery --save 

darin angular-cli.json Datei im scripts Array Dann Auflistung:

scripts": [ 
    "../node_modules/jquery/dist/jquery.min.js" 
] 

es wird in Bundle-Datei und diese Datei wird automatisch verwendet So enthalten root html-Datei:

<script type="text/javascript" src="scripts.bundle.js">

Dann in Dateien, wo ich es brauche und es funktioniert gut.

Es gibt jedoch ein Problem mit ng test Tests, da Karma einen Fehler $ is not defined ausgibt.

+0

Wie haben Sie jQuery in Ihre Komponentenspezifikation aufgenommen? Ich bekomme den gleichen Fehler und versuchte, jQuery über das Datei-Array in karma.conf.js einzubinden. –

Antwort

18

Dies ist, weil die Test-HTML-Datei, die von Karma zur Verfügung gestellt wird, nicht die Datei scripts.bundle.js als normal gedient Version enthält.

Die Lösung ist einfach; Fügen Sie einfach den gleichen Pfad zur jquery-Datei in die Datei im Stammordner des Projekts ein. Diese Datei ist im Stammverzeichnis des Projekts verfügbar.

In files Array, fügen Sie den Pfad mit watched Flag wie folgt aus:

files: [ 
    { pattern: './node_modules/jquery/dist/jquery.min.js', watched: false },  
    { pattern: './src/test.ts', watched: false } 
] 

Karma jetzt über die jQuery Abhängigkeit wissen sollten.

+0

Oh mein Gott, das war ein Schritt weg von dem, was ich für 2 Tage tun wollte, ich habe nur "included" Flag aus der gleichen Zeile entfernt, und es hat funktioniert! – Ayyash

+0

Wenn ich diesen Code jQuery ('# confirmDialogModal') benutze modal ('hide') ;, bekomme ich Modal ist kein Funktionsfehler beim Ausführen von Testfällen, aber in der realen Anwendung funktioniert es. auch jQuery ('# facilityIdModalButton'). click(); wirft keinen Wurf beim Ausführen von Testfällen. irgendeine Idee, wie man jquery Anrufe repariert oder überspringt –