Angular 如何注入一个接受注入令牌的服务,并在9中使用testbed.inject对其进行测试?
我最近将我的应用程序从Angular8迁移到Angular9。对于所有注入的服务,将Testbed.get(服务)更改为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
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
});