angular 2 单元测试:"exportAs" 没有指令

angular 2 unit test: There is no directive with "exportAs"

我创建了一个导出 bootstrap 模态的组件:

@Component({
  selector: 'app-modal',
  templateUrl: './modal.component.html',
  styleUrls: ['./modal.component.scss'],
  exportAs: 'modal'
})

然后在 parent 组件上,我按如下方式使用它:

<app-modal #modalHandler="modal"></app-modal>

问题是当我使用 NO_ERROR_SCHEMA 为 parent 组件编写单元测试时,karma 失败并出现以下错误:

There is no directive with "exportAs" set to "modal"

它仅在我将模态组件导入到 TestBed 中的 parent 组件后解决。

似乎 NO_ERROR_SCHEMA 没有消除这个错误。无论如何,我可以在不将 child 模态导入到我的 parents 单元测试的情况下避免此错误?

It resolves only after i import the modal component to the the parent component in TestBed.

应该是导入的。因为在 TestBed 中,您刚刚使用父组件创建了一个空模块。在执行此操作时,它也会尝试编译和执行您的父模板。在那里它被定义为

<app-modal #modalHandler="modal"></app-modal>

因此它将查找定义为导出为 modal 的对象。

在测试用例中,因为您的模块是空的并且没有导入 app-modal,所以您的父模板无法初始化。

所以你需要

import the modal component to the the parent component in TestBed

这就是 TestBed 的工作原理。您需要导入,这需要您独立测试您的组件。

注:

通常我们使用以下行在规范字段本身中创建一个测试模块。

TestBed.configureTestingModule({
});

所以它没有使用您的父组件所在的模块。相反,它是在 运行 时间内创建一个测试模块。