Angular 单元测试中 Testbed.inject(serviceName) 和 Fixture.debugElement.injector.get(serviceName) 之间的区别

tar*_*ava 7 unit-testing karma-jasmine angular

我正在查看我的团队成员编写的测试用例。我观察到,他们在某些地方使用TestBed.inject(serviceName)来注入服务,在某些地方他们使用fixture.debugElement.injector.get(serviceName)。有人可以告诉我这两者之间的区别吗?另外注入服务的正确方法是什么?

例如:

让 abc: ABCService

技术 1:abc = TestBed.inject(ABCService) 技术 2:abc = Fixture.debugElement.injector.get(ABCSerice)

提前致谢

Ali*_*F50 8

我认为它们本质上是同一件事。我只用Technique 1.

在旧版本的 Angular 中,它是,TestBed.get但现在是TestBed.inject

我认为TestBed.inject从根注入器获取服务,同时fixture.debugElement.injector.get获取实际注入到组件中的服务。

你可以在这里读更多关于它的内容。

您可以在Componenta 的装饰器中提供一个服务Component,并且该服务的每个实例都是唯一的(一个单独的实例),我打赌fixture.debugElement.inject.get将获得装饰器中提供的唯一实例,而不是全局单例。在这里查看装饰器中的提供者。