2016-03-29 6 views
0

Hier zu verspotten ist die Klasse, die ich zu Test versuche:Aurelia Unit Test - Wie eine benutzerdefinierte Resolver

import {inject} from 'aurelia-framework'; 
import {CrudResource, DependencyFactory} from 'utils'; 

let commonData = {}; 
    @inject(DependencyFactory.of(CrudResource)) 
    export class CommonDataCache { 
     constructor(crudResourceFactory) { 
      this.crudResource = crudResourceFactory('/Common'); 
     } 
     data() { 
      return Object.keys(commonData).length > 0 ? commonData : 
       this.crudResource.get().then(response => { 
        commonData.clientEntities = response; 
        return commonData; 
       }); 
     } 
    } 

ich diesen Test zu schreiben versucht bin, (veröffentlicht nur der relevante Teil der Kürze halber):

Grundsätzlich, da meine Klasse eine Fabrik der Ressource einspritzt (die Fabrik erlaubt mir nur, die injizierte Abhängigkeit vom Bau zu konfigurieren), versuche ich, eine verspottete Fabrik zu übergeben (was in einer gespotteten Abhängigkeit passieren wird) .

Das Problem, mit dem ich konfrontiert bin, ist, dass irgendwie die CommonDataCache-Klasse mit seiner regulären Abhängigkeit instanziiert wird (im Gegensatz zu meiner verspotteten). Irgendwie versteht Aurelia nicht, dass ich eine verspottete Fabrik für die 'DependencyFactory.of(CrudResource)' Auflösung registriert habe.

Vielen Dank im Voraus.

+0

Mögliches Duplikat von [Aurelia Einheit Test falsch gegangen (Karma/Jasmine)] (http://stackoverflow.com/questions/36271312/aurelia-unit-test-gone-wrong-karma-jasmine) – Sylvain

Antwort

0

Ich persönlich würde Dependency-Injektion in einem Unit-Test nicht verwenden. Ich würde einen Schein erstellen und das an den Konstruktor für CommonDataCache übergeben.

Sobald Sie mit der Verwendung des DI-Systems beginnen, erstellen Sie keine Komponententests mehr, sondern beginnen, E2E-Tests zu erstellen.

+0

Ok, aber was Wenn ich ein benutzerdefiniertes Element/Attribut habe, muss ich das DI-System nicht verwenden? Wie könnte ich selbst ein benutzerdefiniertes Element erstellen? – pQuestions123