可以獲取子組件的正確實例,以便像這樣測試行爲。
您可以查詢父通過指令來發現孩子:
import { By } from '@angular/platform-browser';
...
let childComponentInstance: ChildComponent;
// After setting up your component in the TestBed...
parentComponentFixture = TestBed.createComponent(ParentComponent);
...
// Reference the child component from your parent component fixture
childComponentInstance = parentComponentFixture
.debugElement
.query(By.directive(ChildComponent))
.componentInstance;
然後,您可以使用您的測試方法childComponentInstance
。
正如你所說,這不再是一個真正的單元測試和多行爲測試。
(可能需要調用detectChanges()
在parentComponentFixture
正確加載取決於什麼被綁定到它的孩子)
我有點同意你從單元測試的角度,我並指定在該職位。但是,它並沒有真正以封裝的方式描述行爲。有人可能會刪除第一個組件的調用行爲和單元測試,第二個組件的測試仍會通過 - 但行爲已被破壞。我想這突出了TDD和BDD之間的差距。我想測試行爲,而不必進行完整的e2e測試。 –
對我來說,單元測試是關於測試'單元'的。所以,如果你想測試整個互動,那麼它的無論是關於尋找一個封裝了交互的雙方,即使這樣的單元測試將更像一個集成測試,一個更大的「單位」。好消息是,您可以對這些類型的集成測試使用相同類型的測試設置 - 您不一定必須切換到量角器測試 – snorkpete