如何解决如何在使用Testbed.inject并使用InjectionToken进行服务的同时解决Angular9 Karma错误
所以我最近从angular V8迁移到了Angular V9,并得到与Testbed.get贬值有关的警告。 因此,这就是在V8之前使用注入令牌实现的方式
//appModule.Ts
providers: [
{
provide: 'ApiService',useClass: ApiService
},
在appaction.service.spec.ts
中beforeEach(() => {
TestBed.configureTestingModule({
imports: [
HttpClientModule,RouterTestingModule,AppTestingModule
],providers: [
{
provide: TOKEN1,useClass: ApiService
}
]
});
service = TestBed.inject(AppActionService);
apiService = TestBed.inject('ApiService'); //works fine here
reCaptchaV3Service = TestBed.inject(ReCaptchaV3Service);
});
这是我的ApiSevice
@Injectable()
export class ApiService implements ApiServiceInterface {
private baseUrl: string;
constructor(
private http: HttpClient,private appConfigService: AppConfigService,) {
this.baseUrl = this.appConfigService.baseUrl();
}
但是当我升级到Angular V9并使用tesbed.Inject时,应用程序会引发很多错误
升级后,我像这样分别创建了一个注入令牌
export const TOKEN1 = new InjectionToken<ApiService>('ApiService');
这是我愿意测试的apiservice中的方法
startSession(userName: string,x: string) {
return this.http.post(this.baseUrl + 'session',{ userName,x });
}
appaction.service.spec.ts看起来像这样
import { TOKEN1 } from '../../../token';
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
HttpClientModule,useClass: ApiService
}
]
});
service = TestBed.inject(AppActionService);
apiService = TestBed.inject(TOKEN1); //trying to mock my apiservice using a token
reCaptchaV3Service = TestBed.inject(ReCaptchaV3Service);
});
it('should be created',() => {
expect(service).toBeTruthy();
});
it('should start a session',() => {
spyOn(apiService,'startSession').and.returnValue(of(''));
expect(apiService.startSession).toHaveBeenCalledWith(stubData.fakeCache.username,x);
});
在appmodule.ts中,我已经修改了这样的代码
providers: [
{
provide: TOKEN1,
当我运行测试时,它会返回
HeadlessChrome 84.0.4147 (Mac OS X 10.15.5) AppActionService should start a session FAILED
Expected spy startSession to have been called with [ 'username','random' ] but it was never called.
,并且没有任何方法正在执行。在两者之间,我正在调试时也收到NullInjectionToken错误。 我找不到使用Injection Token的与DI相关的文档。任何帮助将不胜感激。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。