2016-05-11 7 views
0

Ich möchte meine Direktive testen, die ein Objekt von Viewmodel empfängt. Die Direktive funktioniert wie erwartet, aber ich kann keinen Test schreiben. Ich denke, es hat etwas mit dem bestandenen Objekt zu tun. Andere Direktivtests mit einfachen Werten funktionieren gut.Angular Direktive mit Objekt als Parameter testen

<dire status="ctrl.myObject"></dire> 

Test:

var compile, scope, directiveElem; 

beforeEach(function() { 
module('App'); 
inject(function ($compile, $rootScope) { 
    compile = $compile; 
    scope = $rootScope.$new(); 
    scope.myMock = { 
    prop0: true, 
    prop1: true 
    }; 

    directiveElem = getCompiledElement(); 
}); 

}); 

function getCompiledElement() { 
    var testDirective = '<dire status="' + scope.myMock + '"></dire>'; 
    var compiledElement = compile(testDirective)(scope); 
    scope.$digest(); 
    return compiledElement; 
    } 

it('should have template', function() { 
    var spanElement = directiveElem.find('dire'); 
    expect(spanElement).toBeDefined(); 
    }); 

Der Test schlägt mit dem folgenden Fehler:

Directive: dire should have template FAILED 
    Error: [$parse:syntax] Syntax Error: Token 'Object' is unexpected, expecting []] at column 9 of the expression [[object Object]] starting at [Object]]. 
    http://errors.angularjs.org/1.4.9/$parse/syntax?p0=Object&p1=is%20unexpected%2C%20expecting%20%5B%5D%5D&p2=9&p3=%5Bobject%20Object%5D&p4=Object%5D 

Ich hoffe, dass jemand mich unterstützen kann. Vielen Dank.

+1

Dies ist * nicht * die Möglichkeit, einen Wert an die Richtlinie zu übergeben. Verwenden Sie 'var testDirective = '';'. Der 'scope.myMock' ist bereits gesetzt und du bist OK. –

+0

Ok, das funktioniert! Ist der beschriebene Weg korrekt, um einfache Werte an eine Direktive zu übergeben? scope.val = 1; Ich würde mit '' übergeben. – roschulze

+0

Ja, natürlich ist es das gleiche Prinzip! –

Antwort

0

myMock bereits gesetzt ist auf scope, die während der Kompilierung enthalten ist, so kann man ganz einfach:

scope.myMock = { 
    prop0: true, 
    prop1: true 
}; 
... 
var testDirective = '<dire status="myMock"></dire>'; 
var compiledElement = compile(testDirective)(scope); <-- scope