Angular TestBed.inject

问题描述

我正在做角度单元测试。 Testbed.inject(service) 是否创建了服务的新实例? 我总是假设 Testbed.configureTestingModule() 创建了服务,并且通过注入我们只是访问了创建的服务的引用。

解决方法

TestBed.configureTestingModule() 可帮助您配置提供程序。配置提供者意味着你让 Angular 依赖注入系统知道这个依赖,稍后它可以在通过依赖注入令牌请求时注入到组件中。在下面的示例中,依赖项和令牌是 ValueService。

TestBed.configureTestingModule({ providers: [ValueService] });

稍后,您可以使用 TestBed.inject 在测试中使用 ValueService。当你说 TestBed.inject Angular 依赖注入系统检查是否有针对令牌注册的提供者,如果是,那么它会创建一个服务实例并返回它。如果它没有找到那个令牌,你就会找到那个著名的

没有提供 ValueService 错误。

it('should use ValueService',() => {
  service = TestBed.inject(ValueService);
  expect(service.getValue()).toBe('real value');
});

所以它类似于我们的应用程序代码,其中我们首先配置提供者,然后将其注入到我们的组件中以获取该服务的实例。