可以获取子组件的正确实例,以便像这样测试行为。
您可以查询父通过指令来发现孩子:
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