我正在 Angular 中用 karma 编写单元测试,但我正在努力解决奇怪的问题。我正在尝试测试
app-source-roll-history-form
内部的 source-roll-history.dialog.ts
的输出取消。为了实现这一点,我需要子组件的实例。当我尝试获取它时,返回父组件实例而不是子组件实例。
source-roll-history-dialog.html
<ng-template #newRollContent>
<app-source-roll-history-form
(save)="assignNewRoll$.next($event)"
(cancel)="newAssignmentForm = false">
</app-source-roll-history-form>
</ng-template>
source-roll-history-dialog.spec.ts
it('should show/hide form to assign new roll', () => {
...
const instance = fixture.debugElement.query(By.css('app-source-roll-history-form')).componentInstance;
console.log(fixture.debugElement.query(By.css('app-source-roll-history-form')));
console.log(instance);
});
console.log(fixture.debugElement.query(By.css('app-source-roll-history-form')));给了我这样的调试元素:
<app-source-roll-history-form _ngcontent-a-c295=""></app-source-roll-history-form>
所以没关系。但是当我尝试获取此组件的实例时:
fixture.debugElement.query(By.css('app-source-roll-history-form')).componentInstance
我正在获取父级的实例:
SourceRollsHistoryDialogComponent{actions$: Actions{_subscribe: observer => { ... }}, toasterService: ToasterService{toastrService: ToastrService{overlay: ...,
免责声明:这个答案没有解释如何获取子组件实例,但它提供了其他方法来解决后面的问题。
问题中,需要子组件的组件实例来触发子组件的输出事件。这可以通过不同的方式完成:
或者如果您不想与子组件交互(例如因为它的设置太复杂):
确保子组件包含在
declarations
的 TestBed.configureTestingModule
部分中。我有同样的问题,这就是解决的方法。