如何解决如何在Angular 9中注入需要注入令牌并使用testbed.inject对其进行测试的服务?
我最近将应用程序从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 举报,一经查实,本站将立刻删除。