2016-12-20 43 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)和它被使用的地方,它调用该函数,然后立即调用组件工厂。我不认为这将是可能的,除非你分叉或公关。 –