2016-06-27 5 views
0

Ich habe Tests geschrieben, die das folgende Muster enthalten, aber ich verstehe es nicht.Testen von Angular mit Jasmin. Was machen module() und inject() und wie sind sie verbunden?

describe("controllerName", function() { 
    "use strict"; 

    beforeEach(function() { 
     module("moduleName"); 

     inject(function(_serviceName_) { 
      serviceName = _serviceName_; 
     }); 
    }); 

    ... 

}); 

Was ruft die module Funktion tun? Was macht das Aufrufen der inject Funktion? Wie weiß die inject Funktion, wo sie den Dienst einspeisen soll?

Es würde mich freuen, wenn Sie eine Erklärung geben können, die ich verstehen kann.

Antwort

2

Wir brauchen das enthaltene Modul, damit wir es testen können. module ist eine Funktion, die von der angular-mocks.js zur Verfügung gestellt wird. Wenn Sie es mit einem Modulnamen als Parameter aufrufen, wird dieses Modul geladen.

inject ist eine andere Methode, die uns von angular-mocks.js zur Verfügung gestellt wird. Es gibt uns Zugriff auf verschiedene Abhängigkeiten, die in unserer Datei deklariert sind. Nehmen Sie zum Beispiel den Code, den Sie gepostet haben, und rufen Sie die inject-Funktion mit einer Callback-Funktion auf, über die Sie auf die Abhängigkeiten zugreifen können, auf die Ihr Controller/Service usw. angewiesen ist. Nur innerhalb dieses Callbacks können Sie diese Abhängigkeiten bestimmten Variablen zuweisen und sie dann in Ihren Tests verwenden.

Da dies muss für jeden Test das heißt den it Block durchgeführt werden, die Anrufe an module und inject Funktionen werden in einem beforeEach Block platziert, wie es vor jedem it Block genannt wird.

Auch seit Sie die inject Funktion aufgerufen haben, gab es Ihnen Zugriff auf die serviceName Abhängigkeit, die Sie irgendwo in Ihrem Test verwenden würden. Im Allgemeinen geben wir einen Servicenamen mit der Nummer _ an. Das ist nur, um sie mit den Variablen zu unterscheiden, die Sie in Ihren Tests für diese Dienste verwenden. $injector entfernt die führende und nachfolgende _ beim Auflösen dieser Namen.

Hoffe das hilft Ihnen, die Tests zu verstehen, die Sie ein wenig besser schreiben.

Sie können mehr darüber lesen here

Verwandte Themen