Angular 角4中的每个组件都需要单元测试吗?
Angular 4随附Angular 角4中的每个组件都需要单元测试吗?,angular,unit-testing,Angular,Unit Testing,Angular 4随附cli工具。创建新组件时,它将生成组件文件、模板文件、样式表和等级库文件(单元测试) MainComponent除了作为其他组件的占位符之外,什么都不做,例如 main组件在其模板中包含以下内容 <navbar-component></navbar-component> <router-outlet></router-outlet> <footer-component></footer-component&
cli
工具。创建新组件时,它将生成组件文件、模板文件、样式表和等级库文件(单元测试)
MainComponent
除了作为其他组件的占位符之外,什么都不做,例如
main组件
在其模板中包含以下内容
<navbar-component></navbar-component>
<router-outlet></router-outlet>
<footer-component></footer-component>
在单元测试文件(main.component.spec.ts
)中,我们必须导入所有这些组件,以及其他依赖项(例如,如果您使用的是角材料库、图标模块或服务以及这三个组件的依赖项)、路由器模块和您必须存根路由器等
是否值得保留此组件的单元测试文件?或者,我应该删除这些类型组件的规范文件吗?您必须将角度应用程序断开到不同的模块。不建议只使用一个模块创建多个组件的整个应用程序 也就是说,您可以在配置
测试床时导入包含main组件的模块。在main.component.spec.ts
中,您可能已经导入了其他类似的组件
之前
beforeEach(async(() => {
TestBed.configureTestingModule({
imports:[RouterModule.forRoot(routes)
....
....],
declarations: [NavbarComponent,
FooterComponent
....
....]
})
.compileComponents();
}));
相反,您可以直接导入AppModule
之后
import AppModule from '../app.module'
beforeEach(async(() => {
TestBed.configureTestingModule({
imports:[AppModule]
})
.compileComponents();
}));
此处AppModule
包含组件NavbarComponent、FooterComponent
编辑
做这件事要小心。这样做是解决原始问题的捷径。因为您使用的是真正的服务,而不是嘲笑它们。因此,如果您使用的是调用服务器的服务,那么您的测试也将调用服务器。如果您的服务处理本地存储,那么您的测试也将处理本地存储
更好的方法是将自定义元素\u模式
和服务存根
相结合
自定义元素\u架构
将忽略
- 任何名称中带有-的非角度元素
- 名称中带有-的元素上的任何属性,这是自定义元素的常见规则
因此,如果您正在使用一些
或
注入真正的用户服务可能是一场噩梦。真正的服务可能会要求用户提供登录凭据,并尝试访问身份验证服务器。这些行为可能很难被拦截。创建和注册一个test-double来代替real-UserService更容易、更安全
测试代码是最佳实践,但是,如果组件没有做任何事情,那么就没有什么可测试的。我仍然会保留spec文件,以防将来有人添加功能
如果不需要测试周期,则可以使用--skip tests
或--minimal
标志运行ng new
。后者还会将样式和模板文件内联
请记住,cli将为您完成大部分工作,您可以始终在您的测试床模块中使用模式:[CUSTOM\u ELEMENTS\u SCHEMA]
,让测试忽略模板中引用的组件
参考资料:
谢谢,我不知道我们可以直接导入AppModule!
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
AppComponent
],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
}).compileComponents();
}));