2017-02-14 58 views
0

我想通过DebugElements循环来确保元素描述的对象具有某些属性。例如,我可能希望确保显示屏仅显示那些今天有预约的患者,而不显示可用患者的完整列表。如何从Angular2 DebugElement访问范围数据?

如何从调试元素访问范围数据?

例如:

:在下面的代码,所述page可变包频繁调试元件的搜索到一个单一的类。在这种情况下,它为同一个列表组件的两个实现提供调试元素,并且每个列表组件根据与此问题无关的标准显示不同的患者列表。

it("lists zero patients from other staff members that the staff member who is logged in",()=>{ 
    var element : DebugElement, list : any; 
    var user : string = component.credentials.username; 
    var notMyPatientCount : number = 0; 
    for (list of [page.primaryPatients, page.patientBacklog]){ 
     for(element of list){ 
      var patient = /* I need something to put here to extract the PatientSummary object that is displayed in this element */; 
     } 
    } 
    expect(notMyPatientCount).toBe(0, "When filtered, the display only holds patients assigned to the current user."); 
}); 
+0

这只是一个观察不是一个答案,但似乎这个逻辑在服务和为测试属于它属于该服务的测试套件。我真的很困惑,因为我看到很多像这样的测试,我不明白他们的目的。我意识到组件正在过滤数据,但也许该过滤器应该在服务中...我真的不知道 –

+0

我的原始实现使用管道服务来完成这项工作,但管道导致无效区域引用的错误或某事像那样。我试图解决这个问题几天,然后发现一个像上面的实现,并意识到我可以绕过导致我这么多麻烦的管道。 –

+1

我明白这是有道理的。 Pipe并不是一项真正的服务,它更多的是放入所有视图命名空间的功能。我在想更多,你会想要注入一个常规的服务,并使用它,因为服务比组件更容易测试。感谢您的解释。 –

回答

1

测试页面包含DebugElement(click here for DebugElement API)的API参考。

我以前曾经阅读过这个文档,但是我错过了名为“componentInstance”的属性指的是附加到调试元素而不是测试范围的组件实例。

要访问PatientSummary对象在DebugElement被使用,我用下面的代码:

/** 
* 
* @Component(...) 
* export class PatientListItemComponent { 
*   ... 
*   patientSummary : PatientSummary; 
*   ... 
* } 
* 
*/ 

var component : PatientListItemComponent = element.componentInstance; 
var patient : PatientSummary = component.patientSummary;