2016-05-04 14 views
2

Ich schreibe Tests für einen Controller der Direktive, dessen Startlogik einige unidirektionale gebundene Parameter definiert. Ich habe Schwierigkeiten, unpassende Parameter an den verspotteten Controller zu übergeben. Textgebundene Parameter werden ohne Schwierigkeiten übergeben.

HINWEIS: In dem folgenden Code überspringen I Modul Injektionen und andere irrelevante Teile des Codes

Hier die Definition der ist Richtlinie mit zwei Arten von Parametern:

function DummyDirective() { 
    return { 
    restrict: 'E', 
    scope: {}, 
    bindToController: 
     oneWay: '&', 
     text: '@' 
    }, 
    templateUrl: 'path/to/template.html', 
    controller: 'GreatController', 
    controllerAs: 'vm' 
    }; 
} 

Und hier das ist Controller:

function GreatController() { 
    var vm = this; 

    vm.treasure = ''; 

    activate(); 

    function activate() { 
     vm.treasure = fantastic(vm.oneWay); 
    } 

    function fantastic(crap) { 
     if(crap.stack) return 'gold'; 
    } 
} 

As für die Prüfung:

Während text ordnungsgemäß an $ controller übergeben wird, ist oneWay nicht definiert und der Test schlägt fehl. Ich habe auch versucht, eine Funktion zu übergeben, die ein Objekt ohne Erfolg zurückgibt. Die deckt nicht in eine Richtung gebundene Parameter ab. Wüssten Sie, wie Sie dies tun können, ohne die Richtlinie zu testen und Parameter als Markup zu übergeben? Im Allgemeinen halte ich meine Tests konzentriert und teste Richtlinien und ihre Controller separat.

+3

'onWay' oder' oneWay'? Sie haben diese Variable falsch geschrieben –

+0

Scharfes Auge! Der Rechtschreibfehler wurde korrigiert und die Frage bleibt –

+0

Sie wissen, dass das einseitige Bindungssymbol '<' ist, nicht '&', oder? – Phil

Antwort

0

Was passiert, wenn machen oneway optional, indem Fragezeichen ihrer Definition:

oneWay: '&?' 
+0

Netter Vorschlag. Dennoch wäre es vorzuziehen, Tests zu schreiben, die den zu modifizierenden Code nicht benötigen. Und was ist, wenn dieser Parameter tatsächlich nicht optional ist? –

Verwandte Themen