首页 > 解决方案 > 如何在测试期间获取动态角度分量的实例?

问题描述

这是我的代码:

    const componentFactory = this.componentFactoryResolver.resolveComponentFactory(componentClass);
    const dialogElement = document.createElement('some-dialog');
    const componentRef = componentFactory.create(
      this.injector,
      [],
      dialogElement
    );
    document.body.appendChild(dialogElement);

此代码发生在服务内部。现在,我想从测试文件中获取组件的实例(componentRef)。考虑到我在测试中只有 DOM 元素,如何做到这一点?

标签: angularunit-testingangular-dynamic-components

解决方案


好的。我找到了解决方法。因为我是决定我的componentClass外观的人(作为函数的参数),所以我只需要确保componentClass在测试本身中公开我想要的内容:

let componentInstance: DialogContentComponent;
@Component({
  template: `<h1 id="dialog-content">Hello</h1>`,
})
class DialogContentComponent {
  constructor() {
    componentInstance = this;
  }
}

然后 componentInstance 将是服务内部生成的。

需要注意的一点 - 不要忘记在beforeEach语句中重置 componentInstance 以确保它不会从其他测试中携带。


推荐阅读