2016-12-20 42 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)。

語法從NamedNodeMaps得到的東西並不可怕,這是我得到X1從D3對象我的測試一個屬性

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

我的理解是,至於如何看到屬性測試,但我需要的是知道如何設置它們的源元素。由於靠近我可以告訴大家,測試工具剛啓動它用一個id屬性的div標籤,我無法找到任何方式或者注入嘲笑ElementRef到構造函數或設置測試運行通過這些要從dom中讀取屬性 – jspriggs

+0

對不起,完全誤解了你的問題。我只是通過代碼看,它看起來像只有四個在@角/核心/測試功能'insertRootElement'引用。在函數被定義的地方,它只需要一個參數(id)和它被使用的地方,它調用該函數,然後立即調用組件工廠。我不認爲這將是可能的,除非你分叉或公關。 –