2016-07-09 9 views
0

Wie funktioniert getDOM() von @angular/platform-browser/src/dom/dom_adapter tatsächlich funktionieren in Spezifikationen?Wie funktioniertDOM() in Angular 2 Spezifikationen

Es sieht aus wie in some specsgetDOM() bis zu einem gewissen frei stehendem Wurzelelement bezeichnet, ähnlich wie AngularJS $rootElement:

var el1 = el('<div>a</div>'); 
    var el2 = el('<div>b</div>'); 
    getDOM().appendChild(el2, getDOM().firstChild(el1)); 
    expect(getDOM().childNodes(el2).length).toBe(2); 

Und in gebündelt Jasmine matchersgetDOM() bezieht sich auf magische Weise auf das gleiche Element:

function(actual: any /** TODO #???? */, className: any /** TODO #???? */) { 
     return { 
     pass: getDOM().hasClass(actual, className) == !isNot, 
     get message() { 
      return `Expected ${actual.outerHTML} ${isNot ? 'not ' : ''} 
        to contain the CSS class "${className}"`; 
     } 
     }; 
    }; 

ich war um aus Gründen der Bequemlichkeit einige Chai-Behauptungen zu erstellen, aber das lässt mich denken, dass ich etwas Wichtiges darüber verpasse, wie sich Angular 2 in Komponententests verhält.

Was ist dort los? Wie wird getDOM() Kontext festgelegt? Was ist dieser Kontext? Kann es zur Zeit nur einen Kontext geben? Soll getDOM() im Produktionscode verwendet werden?

Antwort

3

Sie sollten nicht von .../src/... einer Abhängigkeit importieren, da dies als private Implementierung dieses Pakets betrachtet wird.

DomAdapter ist nur für Angular2-interne Verwendung.

Es wurde für eine Weile als öffentlich exportiert, wurde aber vor einiger Zeit aus der öffentlichen API entfernt, deshalb schlagen mehrere Antworten vor, es zu verwenden.

+0

Also sollte ich die Gründe ignorieren, warum interne Matcher darauf verweisen und nur bei regulären DOM bleiben, sollte ich nicht? – estus

+0

Genau. Wenn Sie eine vollständige Abstraktion vom DOM wünschen (wozu normalerweise 'DomAdapter' verwendet wird), müssen Sie einen benutzerdefinierten' Renderer' implementieren, aber dies ist noch nicht gut dokumentiert. –

+0

Ok, danke, ich werde Renderer genauer unter die Lupe nehmen. – estus