gpt4 book ai didi

angular - Angular 组件单元测试实际上是单元测试吗?

转载 作者:行者123 更新时间:2023-12-05 03:00:13 24 4
gpt4 key购买 nike

我开始学习单元测试,并且了解主要目标是单独测试系统。因此,任何依赖项都应该被 stub 、模拟等。

根据有关测试的 Angular 文档,您应该模拟通过依赖注入(inject)提供的任何内容。到目前为止,一切都很好。但是,如下面的代码所示,您可以通过共享或功能模块简单地导入其他所需的模块、组件、指令、管道。

这真的是单元测试吗?如果被测目标系统是一个组件,这不就是在测试它的整个模块吗?

或者这只是一种让步,即模拟现实应用程序中的所有需求几乎是不可能的?

beforeEach(async(() => {
const routerSpy = createRouterSpy();

TestBed.configureTestingModule({
imports: [ SharedModule ],
declarations: [ HeroDetailComponent ],
providers: [
{ provide: ActivatedRoute, useValue: activatedRoute },
{ provide: HeroService, useClass: TestHeroService },
{ provide: Router, useValue: routerSpy},
]
})
.compileComponents();
}));

最佳答案

Is this really unit testing then? If the target system under test is a component, isn't this actually testing its entire module?

单元测试的定义是测试源代码的小单元,组件实际上就是源代码的小单元。

But then, as shown in the code below, you can simply import other required modules, components, directive, pipes through a shared or feature module.

可以在 JavaScript 中测试最小源代码单元是pure function .如果你是最纯粹的,那么任何更大的东西都不再是最小的单位,但Angular是一个Object Oriented框架,因此在该范式下我们可以说 对象最小 单元。因此,单元测试可以涵盖组件、服务、激活器、解析器等所有对象。

Or is this just a concession that it'd be near impossible to mock all the requirements in a real world application?

祝您在构建系统后尝试测试它。

如果你想构建可以测试的东西,那么先编写测试。

https://en.wikipedia.org/wiki/Test-driven_development

纯组件

纯组件是一种没有外部依赖性的组件,不会改变外部状态并为相同的输入生成相同的输出。具有用户表单的组件不可能是,因为 new Date() 不是纯的。

单元测试框架了解这些现实世界问题并提供模拟、 spy 等解决方案,以允许测试人员通过测试来覆盖不纯的源代码,以验证在纯环境中的期望 可重复的方式。

这就是您所能做的,但它仍然是单元测试,这才是重要的。

关于angular - Angular 组件单元测试实际上是单元测试吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56984970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com