我有一个Angular 8应用程序,我试图模拟一些子组件。
嘲笑本身就很好。但是,为了组织和可重用性,我想将模拟移出 。spec 文件并放入其自己的mock目录中,如下所示:
myApp
|-- src
|-- app
|-- app.component.spec.ts
|-- mocks
|-- material
|-- mat-drawer-container.ts
MaterialDrawerContainer的模拟如下所示:
import {Component, Input} from '@angular/core';
@Component({
selector: 'mat-drawer-container',
template: ''
})
export class MockMatDrawerContainer {
@Input() mode;
}
测试本身仍按预期工作。但令人恼火的是,在MockMatDrawerContainer下面有一条很大的旧红线,抱怨“MockMatDrawerContainer没有在任何Angular 模块中声明”,尽管它是在testbed configure test模块中使用的:
TestBed.configureTestingModule(
{declarations: [MockMatDrawerContainer]}).compileComponents;
我已经找到了堆栈溢出对“在更改时编译”的建议以及对tsconfig的相关更改。app.json for compileOnSave,但是除了在mock目录中创建一个假的ngModule之外,没有任何帮助,这看起来很愚蠢。
我该怎么解决这个问题?
2条答案
按热度按时间6ojccjat1#
虽然你是正确的,你不应该,正如你在你的答案中提到的,禁用Angular项目的所有这种类型的检查,这绝对是一个有效的用例来禁用测试模拟的检查。
这些警告来自代码检查(IntelliJ IDEA和WebStorm)。
要禁用任何检查(对于任何类型的项目):
1.将光标放在违规代码中(下划线)
1.选择检查
1.“禁止上课”
在本例中,这将添加注解:
jv2fixgn2#
转到 * 首选项 * → * 编辑器 * → * 检查 * → * 缺少或无效的组件、指令或管道 *。
虽然上面的内容在技术上是正确的,但它仍然感觉很笨拙,因为这些检查是有原因的。
A better way to implement a testing library for reuse can be found here。