【问题标题】:angular 2 unit test: There is no directive with "exportAs"角度 2 单元测试:没有带有“exportAs”的指令
【发布时间】:2017-03-20 08:10:58
【问题描述】:

我创建了一个导出引导模式的组件:

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

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

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

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

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

只有在我将模态组件导入到TestBed中的父组件后才能解决。

似乎 NO_ERROR_SCHEMA 不会消除此错误。无论如何,我可以在不将子模式导入父母单元测试的情况下避免此错误?

【问题讨论】:

  • 您是否在多个子模块中导入了 ModalModule。
  • 不,只有一个。它与问题有什么关系?
  • 您还需要在单元测试中使用所有依赖模块来模拟模块

标签: angular karma-jasmine ng2-bootstrap


【解决方案1】:

只有在我将模态组件导入父级后才解决 TestBed 中的组件。

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

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

所以它会寻找一个定义为导出为modal的对象。

在测试用例中因为你的模块是空的并且没有导入那个app-modal,所以你的父模板不能被初始化。

所以你需要

将模态组件导入TestBed中的父组件

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

注意:

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

TestBed.configureTestingModule({
});

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

【讨论】:

  • 谢谢,只是觉得有办法不用它。由于模态可能有它的依赖关系,我不想在父组件中测试它的功能......
猜你喜欢
  • 2023-04-10
  • 2017-12-19
  • 1970-01-01
  • 2019-02-01
  • 1970-01-01
  • 2021-08-26
  • 1970-01-01
  • 2020-08-05
  • 2018-09-04
相关资源
最近更新 更多