有人如何测试Angular 2中2个兄弟组件之间的通信?我似乎没有在网上找到任何可行的资源。
app.component.html
<comp1 #a></comp1>
<comp2 [x]="a.get()"></comp2>
其中get()
是comp1
组件中的一个函数,其值I传递给组件comp2
的一个类变量。我怎样才能有效地测试这个?
app.component
是comp1
和comp2
的父组件,并将其包含在内。
答案 0 :(得分:1)
您提到的片段提供了一个部分想法。但我认为你想测试一个组件数据的变化是否会影响其他组件的数据。
it('should xx', async(() => {
const fixture = TestBed.createComponent(ParentComponent);
fixture.detectChanges();
const child1 = fixture.debugElement.queryAll(By.directive(ChildComponent1))[0];
const but = child1.queryAll(By.css('#some_element'))[0].nativeElement; // change data in child1
fixture.detectChanges(); // detect changes
const child2 = fixture.debugElement.queryAll(By.directive(ChildComponent2))[0];
const child2info = child2.queryAll(By.css('some_element'))[1].nativeElement.innerHTML;
expect(child2info).toBe('some_data'); // check if reflected in child2
}));
所以,基本上你使用By.directive()
来获取子组件的DOM元素。完成后,您需要使用nativeElement
编辑DOM。
编辑完成后,再次使用By.directive()
获取第二个子组件的DOM元素,然后进一步检查其DOM是否有数据更改。
注意:
要更改ChildComponent1
中的数据,请执行but.value = "something"
(如果是<input>
框),然后在致电Event
之前创建detectChanges()
。