我有一个 Angular 8 应用程序,我正在尝试模拟一些子组件。
嘲笑本身很好。但是,为了组织和可重用性,我想将模拟从.spec文件中移出并移动到它自己的模拟目录中,如下所示:
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 没有在任何角度模块中声明",即使它在测试平台配置测试模块中使用,如下所示:
TestBed.configureTestingModule(
{declarations: [MockMatDrawerContainer]}).compileComponents;
我找到了"编译更改"的堆栈溢出建议以及对 compileOnSave 的 tsconfig.app.json 的相关更改,但除了在模拟目录中创建一个虚假的 ngModule 之外,没有任何帮助,这看起来很愚蠢。
我该如何解决这个问题?
虽然您是正确的,正如您在答案中提到的,您不应该为 Angular 项目禁用所有此类检查,但禁用测试模拟检查绝对是一个有效的用例。
这些警告来自代码检查(IntelliJ IDEA和WebStorm(。
要禁用任何检查(对于任何类型的项目(:
- 将光标放在有问题的代码中(带下划线(
- Alt+Enter
- 选择检查
- "为阶级压制">
在这种情况下,这将添加注释:
// noinspection AngularMissingOrInvalidDeclarationInModule
转到"首选项"→"编辑器"→"检查"→缺少或无效的组件、指令或管道。
虽然上述内容在技术上是正确的,但由于这些检查是有原因的,因此仍然感觉很笨拙。
可以在此处找到实现测试库以进行重用的更好方法。