Angular 如何注入一个接受注入令牌的服务,并在9中使用testbed.inject对其进行测试?

Angular 如何注入一个接受注入令牌的服务,并在9中使用testbed.inject对其进行测试?,angular,typescript,unit-testing,karma-runner,angular9,Angular,Typescript,Unit Testing,Karma Runner,Angular9,我最近将我的应用程序从Angular8迁移到Angular9。对于所有注入的服务,将Testbed.get(服务)更改为Testbed.inject(服务)工作正常 然而,如果服务采用字符串注入令牌,比如Testbed.get('StringToken') 原始设置: //appModule.ts providers: [ { provide: 'ApiService', useClass: ApiService }, 另一项我正在注射的服务 //xyz

我最近将我的应用程序从Angular8迁移到Angular9。对于所有注入的服务,将Testbed.get(服务)更改为Testbed.inject(服务)工作正常

然而,如果服务采用字符串注入令牌,比如
Testbed.get('StringToken')

原始设置:

//appModule.ts
providers: [
    {
      provide: 'ApiService',
      useClass: ApiService
    },
另一项我正在注射的服务

//xyz.service.ts
export class XYZService {


  constructor(
    @Inject('ApiService') private apiService: ApiServiceInterface,
    private configurationService: ConfigurationService,
  ) {
 
  }
当我在规范文件中使用testbed.get时,一切正常,但我得到一个警告,testbed.get已贬值

//xyz.service.spec.ts
describe('XYZService', () => {
  let configurationService: ConfigurationService;
  let apiService: ApiServiceInterface;

  beforeEach(() => {
    TestBed.configureTestingModule({
      imports: [
        HttpClientModule,
        TranslateModule.forRoot(),
        AppTestingModule
      ],
    });
    configurationService = TestBed.inject(ConfigurationService);
    cacheService = TestBed.inject(CacheService);
    apiService = Testbed.get('ApiService');
  });
根据angular文档,我在一个单独的文件中创建了一个InjectionToken,并到处导入它。 这是新的设置

//token.ts
import { InjectionToken } from '@angular/core';
import { ApiService } from './app/services/api/api.service';

export const TOKEN1 = new InjectionToken<ApiService>('ApiService');

服务似乎未启动,并且没有任何测试正在运行。我是不是错过了什么

//token.ts
import { InjectionToken } from '@angular/core';
import { ApiService } from './app/services/api/api.service';

export const TOKEN1 = new InjectionToken<ApiService>('ApiService');

//appModule.ts
providers: [
    {
      provide: TOKEN1,
      useClass: ApiService
    },
//xyz.service.ts
export class XYZService {


  constructor(
    @Inject(TOKEN1) private apiService: ApiServiceInterface,
    private configurationService: ConfigurationService,
  ) {

  }
//xyz.service.spec.ts
describe('XYZService', () => {
  let configurationService: ConfigurationService;
  let apiService: ApiServiceInterface;

  beforeEach(() => {
    TestBed.configureTestingModule({
      imports: [
        HttpClientModule,
        TranslateModule.forRoot(),
        AppTestingModule
      ],
    });
    configurationService = TestBed.inject(ConfigurationService);
    cacheService = TestBed.inject(CacheService);
    apiService = Testbed.inject(TOKEN1); //Throws a lot of errors
  });