2017-08-26 87 views
1

如何在角2 2個兄弟組件之間有人試驗通信?我似乎沒有找到任何可行的資源在線。單元測試通信角2

app.component.html

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

其中get()comp1分量,其值我傳遞到部件comp2的類變量中的一個內的一個函數。我怎樣纔能有效地測試它?

app.componentcomp1comp2的父組件,幷包含它們。

+0

有一堆關於網絡上的解釋,plrese參考角文檔:https://angular.io/guide/testing#test-a-component。你在'app.component.spec.ts'中寫入測試。 – DAG

+0

我不問如何編寫測試。另外,沒有文檔解釋瞭如何測試我試圖在這裏暗示的通信。相信我。我到處搜索。 –

+0

這實際上是一個簡單的測試。你甚至嘗試過嗎?在這裏發佈你的測試,以便我可以繼續幫助你 – DAG

回答

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