2016-12-20 5 views
3

私は、従来のコードとの互換性の理由から、アプリケーションコンポーネントで使用される属性を使用して情報を取得する必要がある、私が取り組んでいるAngular 2アプリケーションがあります。例えば、角度の2アプリを起動するHTMLは次のようになります。アプリケーションコンポーネントの角2 nativeElement属性テスト

<myApp id="xyz" areaDone="true" value="" requestID="abc"> Loading ... </myApp> 

をしかし、私はこれらの属性の存在や価値に基づいて発生することになっている行動の周りにいくつかのユニットテストを書くしようとすると、 、それらはヌル/未定義です。

値を取得するために、私たちは、このようなコンストラクタでそれらを引いている:

 let native = this.elementRef.nativeElement; 
     this.requestID= native.getAttribute("requestID"); 

ので、期待される属性を持つべきであるネイティブの要素を強制するテストベッド/プロバイダによる方法はありますか?

答えて

3

this.elementRef.nativeElement.attributeを呼び出すと、属性のNamedNodeMap(http://www.w3schools.com/jsref/prop_node_attributes.asp)が返されます。

const nodeAttributes = compiled.querySelector('#temp-draggable-link-line').attributes as NamedNodeMap; 
expect(nodeAttributes.getNamedItem('x1').value).toEqual(200); 
+0

私が理解NamedNodeMapsからのものを取得するための

構文は、これは私がx1は私のテストのいずれかにD3オブジェクトから属性を取得している、ひどいではない、というの属性を参照する方法に関して私が必要とするのは、ソース要素にそれらを設定する方法を知ることです。私が知る限りでは、テストハーネスはid属性を持つdivタグを使用して起動しますが、虚偽のElementRefをコンストラクタに挿入する方法やテストランナーを設定する方法を見つけることはできません属性はDOMから読み取られる – jspriggs

+0

申し訳ありませんが、あなたの質問を完全に誤解しました。コードを調べたところ、@ angular/core/testingの 'insertRootElement'関数への参照が4つしかないようです。ファンクションが定義されている場合は、1つのパラメータ(ID)しか使用されず、使用される場所ではそのファンクションがコールされ、すぐにコンポーネントファクトリがコールされます。私はこれをフォークしたりPRしない限り、これが可能になるとは思わない。 –

関連する問題