angular - Angular 单元测试 - new Service() 和 Testbed.inject() 有什么区别?
问题描述
在 Angular 的网站上,我们可以看到两种编写 Service 单元测试的方法。
第一种是通过新服务实例化服务。
let service: ValueService; beforeEach(() => { service = new ValueService(); });
二是通过TestBed 实例化服务。
beforeEach(() => {
TestBed.configureTestingModule({ providers: [ValueService] });
service = TestBed.inject(ValueService);
});
谁能告诉我这两种方法有什么区别,什么时候应该和不应该使用它们,非常感谢!
解决方案
如果我测试的服务有使用其他服务或路由器的构造函数,我还能使用 new Service()
在这种情况下,您还将创建其他服务并将其传递给构造函数。您可以手动连接它,而不是使用角度依赖管理。
它说您可以在以后不调用构造函数时使用 new Service 。这是否意味着我不能在其他组件的单元测试(在同一个项目中)中调用此服务,在它的 Testbed 中提供此服务?
我认为它们只是意味着,如果您需要为每个地方继续调用新服务,那么使用创建一个实例并每次都返回它的 Testbed 效率不高,而且更好。
推荐阅读
- javascript - Firebase 函数未向客户端应用返回响应
- java - Java 无法为 JDBC 驱动程序加载类
- javascript - 使用循环触发多个锚标签的相同 onclick 功能
- typescript - TypeScript:指定方法返回“this”类型
- javascript - 如何在点击时将新页面滚动到顶部?
- python - 我无法在我的 python 3.8 中安装 PyAudio 我该怎么办?
- reactjs - React onClick:无法读取未定义的属性'functionName'
- git - 有没有办法在 github 上查看 .ipynb 文件更改但不是 JSON 格式?
- javascript - Firebase 函数和外部节点包
- java - 保护 <、> 和 & 是否足以清理 Swing 组件中的 HTML?