【问题标题】:How to solve/suppress IntelliJ warning that mock class is not declared in any Angular module?如何解决/抑制 IntelliJ 警告,即模拟类未在任何 Angular 模块中声明?
【发布时间】:2020-01-07 16:50:38
【问题描述】:

我有一个 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 配置测试模块中使用如下:

TestBed.configureTestingModule(
            {declarations: [MockMatDrawerContainer]}).compileComponents;

我找到了关于“Compile on changes”的 stackoverflow 建议以及对 tsconfig.app.json 进行 compileOnSave 的相关更改,但除了在 mock 目录中创建一个虚假的 ngModule 之外没有任何帮助,这似乎很愚蠢。

有什么智慧之言吗?

【问题讨论】:

    标签: typescript unit-testing jasmine


    【解决方案1】:

    虽然您是正确的,但正如您在回答中提到的那样,您不应该为 Angular 项目禁用所有此类检查,但禁用测试模拟检查绝对是一个有效的用例。

    这些警告来自 IDEA 检查(IntelliJ 和 Webstorm)。

    禁用任何检查(针对任何类型的项目)

    1. 将光标放在有问题的代码中(下划线)
    2. Alt-Enter
    3. 选择检查
    4. “禁止类”

    在这种情况下,这将添加注释:

    // noinspection AngularMissingOrInvalidDeclarationInModule
    

    【讨论】:

      【解决方案2】:

      当然,一旦我花了所有时间输入这个问题,我就会弄清楚:)

      如果其他人点击这个去

      首选项 > 编辑器 > 检查 > 缺少或无效的组件、指令或管道。

      更新:虽然上述内容在技术上是正确的,但由于某些原因将这些检查放在那里,因此仍然感觉很糟糕。

      A better way to implement a testing library for re-use can be found here.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-23
        • 1970-01-01
        • 1970-01-01
        • 2014-03-03
        • 1970-01-01
        • 1970-01-01
        • 2017-07-25
        • 1970-01-01
        相关资源
        最近更新 更多