如何在Angular 6的生产构建中忽略spec文件和mock文件

7

我正在尝试在生产环境下编译我的 Angular 应用程序,但是遇到了这个错误:

无法确定 /src/testing/translate.service.spec.ts 中 TranslateMockPipe 类的模块!请将 TranslateMockPipe 添加到 NgModule 中以修复此问题。

TranslateMockPipe 类是我声明的一个常见类,并且我在所有测试文件中都在使用它,以避免在所有测试用例中重复相同的代码行。

该类的代码:

@Pipe({ name: "translate" })
class TranslateMockPipe {
    transform = (ss) => ss
}

我在我的测试中使用它的方式如下:

TestBed.configureTestingModule({
            declarations: [
                DemoComponent,
                TranslateMockPipe
            ]
})

如果我运行项目,一切都很顺利,我的测试也没有问题,但当我尝试编译生产版本时会失败。

我该如何忽略这种假类以进行生产构建?


这就是为什么模拟组件和管道不应该包含在任何模块中,它只是用于测试。 - Ricardo
发布解决方案,我会检查两个并告诉你。 - Ricardo
实际上有几种方法,这都取决于您如何构建项目,但是帖子应该可以工作,否则请告诉我。 - Lucho
你成功了吗? - Lucho
我尝试了第一个选项,但对我没有用,第二个选项太复杂了,因为我的应用程序太大了。我找到了这个库:https://www.npmjs.com/package/ng-mocks,它应该允许我创建所有组件管道和指令的模拟,而无需将其放入模块中。我会去看看并保持你们的通知。 - Ricardo
显示剩余2条评论
2个回答

6
你可以在这个问题单上查看,但最简单的方法应该是:
  • add a path where you have your testing utilites e.g. "./app/shared/tests/" and in your tsconfig.json add:

    "exclude": [
      "./app/shared/tests/*.ts"
    ]
    

或者

  • 创建一个模块,该模块没有被导入到除测试用途的Testbed模块之外的任何其他模块中,并包括模拟、存根等...

1
如果您正在使用带有Angular的Ionic Framework,则需要更新tsconfig.app.json中的exclude部分,以便列出出现在错误消息中(或最可能是所有类似命名的文件)的文件。
错误:

无法确定/src/testing/translate.service.spec.ts中TranslateMockPipe类的模块!将TranslateMockPipe添加到NgModule中以修复它。

tsconfig.app.json

...

 "exclude": [
   "src/testing/*.service.spec.ts"
 ]

...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接