getTestBed 和 TestBed 之间的区别

Fan*_*ung 5 unit-testing jasmine angular

假设我有一个如下所示的测试配置

 TestBed.configureTestingModule({
            imports: [HttpClientTestingModule],
            providers: [SomeService]
        });

        injector = getTestBed()
Run Code Online (Sandbox Code Playgroud)

如果我想获得注入服务,两者之间有什么区别

TestBed.get(SomeService)
injector.get(SomeService)
Run Code Online (Sandbox Code Playgroud)

Ami*_*ian 3

那很有意思。我认为这是 getTestBed 和 TestBed 之间的区别:

TestBed 配置和初始化 单元测试环境,并提供在单元测试中创建组件和服务的方法。getTestBed返回适用 TestBed 的单例

更深入

TestBed是为 Angular 应用程序和库编写单元测试的主要 API 。

interface TestBed {
  platform: PlatformRef
  ngModule: Type<any> | Type<any>[]
  initTestEnvironment(ngModule: Type<any> | Type<any>[], platform: PlatformRef, aotSummaries?: () => any[]): void
  resetTestEnvironment(): void
  resetTestingModule(): void
  configureCompiler(config: { providers?: any[]; useJit?: boolean; }): void
  configureTestingModule(moduleDef: TestModuleMetadata): void
  compileComponents(): Promise<any>
  get<T>(token: Type<T> | InjectionToken<T>, notFoundValue?: T, flags?: InjectFlags): any
  execute(tokens: any[], fn: Function, context?: any): any
  overrideModule(ngModule: Type<any>, override: MetadataOverride<NgModule>): void
  overrideComponent(component: Type<any>, override: MetadataOverride<Component>): void
  overrideDirective(directive: Type<any>, override: MetadataOverride<Directive>): void
  overridePipe(pipe: Type<any>, override: MetadataOverride<Pipe>): void
  overrideProvider(token: any, provider: { useFactory: Function; deps: any[]; }): void
  overrideTemplateUsingTestingModule(component: Type<any>, template: string): void
  createComponent<T>(component: Type<T>): ComponentFixture<T>
}
Run Code Online (Sandbox Code Playgroud)

然后getTestBed是TestBedViewEngineTestBedRender3的实例。

const getTestBed: () => TestBed;
Run Code Online (Sandbox Code Playgroud)