2016-07-09 7 views
0

getDOM()@angular/platform-browser/src/dom/dom_adapterからどうして実際に動作しますか?getDOM()は角度2の仕様でどのように動作するのですか

getDOM()in some specsように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); 

束ねJasmine matchersgetDOM()で魔法のように同じ要素を参照:

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}"`; 
     } 
     }; 
    }; 

私がしていました利便性のためにいくつかのChaiアサーションを構築することができますが、これはユニットテストでAngular 2がどのように動作するかについて重要なことを見逃していると思います。

何が起こっているのですか?どのようにgetDOM()コンテキストが設定されていますか?この文脈は何ですか?ある時点でただ1つの文脈しかありえないのでしょうか?プロダクトコードでgetDOM()を使用する必要がありますか?

答えて

3

.../src/...から依存関係をインポートしないでください。これは、そのパッケージのプライベート実装と見なされるためです。

DomAdapterは、内部2専用です。

これはしばらく公開されていましたが、以前は公開APIから削除されていましたが、これがいくつかの回答で使用されている理由です。

+0

だから、内部のマッチャーがそれを参照して、正規のDOMに固執する理由を無視する必要があります。 – estus

+0

DOMから完全な抽象化( 'DomAdapter'が通常使用されているものです)を望むなら、カスタム'レンダラー(Renderer) 'を実装する必要がありますが、これはまだ十分に文書化されていません。 –

+0

ありがとう、私はレンダラーを詳しく見ていきます。 – estus

関連する問題