0

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

4

1 回答 1

0

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');
});

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

于 2021-06-03T05:00:34.877 回答