Nehmen wir an, ich habe ein Winkelmodul definiert als
%Vor%wobei app ein Modul ist, das von der Masse anderer Module abhängt. Jetzt für Unit-Tests kann ich das Modul mit
verspotten %Vor%aber ich muss Mock-Module für alle Abhängigkeitsmodule wie unten erstellen
%Vor%Oder ich muss alle Skriptdateien laden, die diese Module enthalten.
Ich frage mich, was ist der beste Ansatz, um die Abhängigkeitsmodule hier zu verspotten? vor allem, wenn die Abhängigkeitsmodule zu viele sind.
Schauen Sie in requireJs nach, um Ihre Abhängigkeiten zu laden. Mit RequireJs können Sie verschiedene Dateien für Ihren Produktionscode und Ihren Testcode laden.
Hier ist ein (grundlegendes) Beispiel.
Nehmen wir an, Sie haben eine JavaScript-Datei, in der Ihr angulares Modul definiert ist (z. B. app.js
):
Module dependency1Module, dependency2Module, ... haben ein ähnliches Setup:
%Vor% Nun benötigen Sie eine Bootstrap-Datei (zB bootstrap.js
, um den Speicherort der Dateien zu definieren). Sie haben also zwei Bootstrap-Dateien: eine Ihren Produktionscode (mit möglichen verkleinerten Versionen einiger Bibliotheken) und eine Version für Testzwecke:
Anstatt die baseUrl
zu ändern, könnten Sie verschiedene Pfade für die Module definieren, die Sie vortäuschen möchten:
Der letzte Schritt besteht darin, die Bootstrap-Datei in Ihrem HTML-Code (Produktion oder Test) zu pluggen:
%Vor% Dies ist eine Grundvoraussetzung. Bevor Sie einen bestimmten Winkel-Typ (zB Controller, Service, ...) verwenden können, müssen Sie natürlich auch ein requirejs-Modul dafür einrichten (und require
it zB in Ihrem app.js
).
Die Modularisierung Ihrer eigenen App wird Ihnen helfen.
Wenn Ihre App so aussieht:
%Vor%und enthält 50 Dinge wie Filter, Direktiven und Controller. Einige von ihnen hängen von Abhängigkeitsmodulen ab und einige von ihnen hängen von Abhängigkeitsmodulen ab.
Teilen Sie sie basierend auf ihren Verantwortlichkeiten und Abhängigkeiten auseinander.
%Vor%Dann machen Sie Ihre App abhängig von Ihren eigenen Modulen:
%Vor% Dein app
sollte hauptsächlich Bootstrap Code haben.
Wenn Sie jetzt controller13
von mymodule2
testen möchten, müssen Sie nur mymodule2
's Abhängigkeiten vortäuschen, wenn dieses Modul Abhängigkeiten hat. Daher laden die Testsuiten app
nicht, sie laden nur das Modul, das sie testen.
Siehe dieses Beispiel , wo die Tests für MyMainCtrl1
von mymodule1
nur für s1
von Bedeutung sind external1
, auch wenn app
insgesamt von external1
, external2
und external3
abhängt.
Es hängt alles davon ab, was Sie eigentlich testen möchten. Wenn Sie Unit-Tests durchführen, möchten Sie so wenig wie möglich laden / vortäuschen. Wenn Sie zum Beispiel einen Controller testen, verspottet man das Modul und lädt / spottet nur die Abhängigkeiten, die es verwendet.
Tags und Links javascript angularjs