首页 > 解决方案 > Angular 单元测试 - new Service() 和 Testbed.inject() 有什么区别?

问题描述

在 Angular 的网站上,我们可以看到两种编写 Service 单元测试的方法。

第一种是通过新服务实例化服务。

let service: ValueService; beforeEach(() => { service = new ValueService(); });

二是通过TestBed 实例化服务。

beforeEach(() => {
    TestBed.configureTestingModule({ providers: [ValueService] });
    service = TestBed.inject(ValueService);
});

谁能告诉我这两种方法有什么区别,什么时候应该和不应该使用它们,非常感谢!

标签: angularunit-testingkarma-jasmineangular-unit-test

解决方案


如果我测试的服务有使用其他服务或路由器的构造函数,我还能使用 new Service()

在这种情况下,您还将创建其他服务并将其传递给构造函数。您可以手动连接它,而不是使用角度依赖管理。

它说您可以在以后不调用构造函数时使用 new Service 。这是否意味着我不能在其他组件的单元测试(在同一个项目中)中调用此服务,在它的 Testbed 中提供此服务?

我认为它们只是意味着,如果您需要为每个地方继续调用新服务,那么使用创建一个实例并每次都返回它的 Testbed 效率不高,而且更好。


推荐阅读