何时使用NO_ERRORS_SCHEMA和CUSTOM_ELEMENTS_SCHEMA?

13

在 Angular 中,何时需要使用 NO_ERRORS_SCHEMA 和 CUSTOM_ELEMENTS_SCHEMA?

它们是什么意思?它们是用于配置CSS样式吗?


通过快速搜索很容易找到:https://angular.io/guide/testing#no_errors_schema - R. Richards
2个回答

7
在你的测试中,当你定义你的TestBed时,你需要导入或声明你的组件的所有依赖项。
但是,有时候,如果你的测试不涉及特定的子组件,写起来可能会非常麻烦和冗长。
这就是你可以使用NO_ERRORS_SCHEMA的情况。它将忽略所有错误,说它不知道子组件<some-child>...</some-child>。但请记住,使用NO_ERRORS_SCHEMA不是一个好习惯。作为替代方案,你可以创建自己的组件模拟或使用这个ng-mocks库,它非常有用。 CUSTOM_ELEMENTS_SCHEMA则较不宽容。

4
为了扩展这个答案,“NO_ERRORS_SCHEMA”不是因为“写起来很麻烦”,而是因为当你不想测试嵌套组件时,你不需要处理树形结构下的依赖关系等问题。 - Sergey
1
是和否。如果你只想测试组件的一部分,使用NO_ERRORS_SCHEMA可能会带来风险,因为你想要测试的那部分组件的错误将被忽略。关于这个问题,这篇文章很有趣。 - Wandrille
1
唯一会被忽略的错误是关于“没有这样的元素”的错误,这与未声明的组件或自定义元素有关。如果您想测试某个组件,则应将其包含在声明中。这样做没有任何害处。没有人会替你思考。 - Sergey
此外,值得做的好事是阅读与测试相关的完整文档页面。它描述了许多有用的技术等。随着更大的能力而来的是更大的责任 :) - Sergey
2
这个答案似乎不完整 - 它没有详细说明何时使用CUSTOM_ELEMENT_SCHEMA而不是根本不提供schema... - Adam Hughes
显示剩余2条评论

0

查看 https://angular.io/api/core/NO_ERRORS_SCHEMA => 定义了一个模式,允许在任何元素上使用任何属性。

https://angular.io/api/core/CUSTOM_ELEMENTS_SCHEMA => 定义了一个模式,允许 NgModule 包含以下内容: 以破折号命名法(-)命名的非 Angular 元素。 以破折号命名法(-)命名的元素属性。 破折号命名法是自定义元素的命名约定。

因此,NO_ERRORS_SCHEMA 不太严格,但模板中的任何未知内容都将被接受。


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