单元测试Angular 2中兄弟姐妹之间的通信

时间:2017-08-26 13:21:39

标签: angular unit-testing components testbed

有人如何测试Angular 2中2个兄弟组件之间的通信?我似乎没有在网上找到任何可行的资源。

app.component.html

<comp1 #a></comp1>
<comp2 [x]="a.get()"></comp2>

其中get()comp1组件中的一个函数,其值I传递给组件comp2的一个类变量。我怎样才能有效地测试这个?

app.componentcomp1comp2的父组件,并将其包含在内。

1 个答案:

答案 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()