问题描述
我最近将应用程序从Angular8迁移到了Angular9。对于所有注入的服务,将Testbed.get(service)更改为Testbed.inject(service)都可以正常工作。
但是,如果服务采用Testbed.get('StringToken')
之类的String注入令牌,则会出现很多错误。
原始设置:
//appModule.ts
providers: [
{
provide: 'ApiService',useClass: ApiService
},
//api.service.ts
@Injectable()
export class ApiService implements ApiServiceInterface {
private baseUrl: string;
constructor(
private http: HttpClient,private appConfigService: AppConfigService,) {
this.baseUrl = this.appConfigService.baseUrl();
}
我正在向其中注入APIsevice的另一项服务
//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');
});
根据角度文档,我在一个单独的文件中创建了InjectionToken并将其导入到任何地方。 这是新设置
//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,
//xyz.service.ts
export class XYZService {
constructor(
@Inject(TOKEN1) private apiService: ApiServiceInterface,) {
}
//xyz.service.spec.ts
describe('XYZService',});
configurationService = Testbed.inject(ConfigurationService);
cacheService = Testbed.inject(CacheService);
apiService = Testbed.inject(TOKEN1); //Throws a lot of errors
});
似乎没有启动服务,并且没有任何测试正在运行。我会错过什么吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)