如何在使用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 (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...