2016-04-09 11 views
0

in einem Angularjs Tutorial neu definiert werden, fand ich dieses Beispiel einer Werksprüfung:Warum Factory-Methode des Winkelmodul im Test Mock

das Modul:

angular.module('omdbModule', []) 
    .factory('omdbApi', function omdbApiFactory() { 
      return { 
       search: function() { 
       //logic to get data return movieData; 
      } 
    } 

der Test (es kann wird durch zwei Arten erfolgen: eine anonyme Funktion mit ‚$ liefern‘ als Argument übergeben:

angular.mock.module(function($provide){ 
     $provide.factory('omdbApi', function(){ 
      return{ 
       search:function(query){ 
        return movieData; 
       } 
     } 
    }); 

oder einfach nur mit einem Objektliteral:

angular.mock.module({ 
     'omdbApi':{ 
       { search:function(query){ 
        return movieData; 
       } 
     } 
    }); 

In beiden Fällen verstehe ich nicht, warum die Suchfunktion im Schein neu definiert werden musste, anstatt nur die Fabrik zu bekommen und dann automatisch auf alle ihre Eigenschaften und Methoden zuzugreifen. Ich denke, das Definieren der gesamten Fabrik in einem Mock ist gut, falls es nicht wirklich in dem Modul existiert, aber warum dies getan wird, wenn das Modul und seine Fabrik bereits definiert sind und sie wirklich existieren?

+1

Dies ist wahrscheinlich kein Test des Dienstes selbst, sondern eher ein Test einer Komponente ** mit ** diesem Dienst. Und der Dienst wird abgestempelt, um bekannte, gefälschte Daten zurückzugeben. Nichtsdestoweniger könnte das gleiche erreicht werden, indem man einfach den echten Dienst ausspioniert. –

+0

Bestätigen Sie, dass es nicht notwendig ist, die gesamte Fabrik und ihre Methoden neu zu definieren, wenn sie bereits definiert sind? – Bardelman

+1

Dieser Code wurde vollständig aus dem Zusammenhang gerissen. Ich kann also nur raten, warum der Autor das gemacht hat. Wenn es darum geht, den Dienst selbst zu testen, macht es für mich keinen Sinn. Wenn es darum geht, eine Komponente abhängig vom Dienst zu testen, kann es Sinn machen, aber ich verwende dafür normalerweise einen Spion. Aber ohne Kontext könnte mir ein wichtiges Teil des Puzzles fehlen. –

Antwort

0

Einer der Gründe, sich über einen Dienst lustig zu machen, ist, unerwünschte Aktionen zu verhindern, die Fixtures benötigen (nicht XHR-Anfragen, DOM-Operationen) oder zu viele bewegliche Teile haben.

Ein weiterer guter Grund ist die Vermeidung von Kreuzkontaminationen. Wenn Einheit A bricht, möchte der Entwickler wissen, was genau defekt ist. Es wird schwieriger, wenn B- und C-Unit-Tests ebenfalls rot sind, also sollte man dem Breadcrumb folgen, um herauszufinden, ob der Unruhestifter A ist. Es wird viel schwieriger, wenn der Breadcrumb stoppt und die App und die Spezifikationen nicht repariert werden -und-gehen Art der Arbeit.

Wenn der Test nicht mehrere Objekte zusammen testen lässt (was Integrationstest ist, ergänzt er Komponententests und ersetzt sie nicht), testen Sie jedes Gerät einzeln.