首页 > 解决方案 > Angular 9 TestBed.inject 和提供者覆盖

问题描述

既然 TestBed.get 在 Angular 9 中已被弃用,那么当使用提供者覆盖时,以下替代方案是什么

TestBed.configureTestingModule({
  providers: [{ provide: MyClass, useClass: MyStub}]
});

const obj : MyStub = TestBed.get(MyClass);

真的是这样还​​是有更好的方法?

const obj : MyStub = TestBed.inject(MyClass) as unknown as MyStub;

标签: angularangular-testangular9angular-unit-test

解决方案


出于所有意图和目的,您MyStub至少应该是 Partial 或扩展它尝试模拟的类的类,否则您的测试有点“错误”,所以如果是这种情况,您可以这样做:

const obj = TestBed.inject(MyClass);

如果你的存根上有不同的属性或不同的函数签名,你也可以这样做:

const obj = TestBed.inject<MyStub>(MyClass as any);

但一般来说,您的模拟应该(部分)与其模拟的东西共享相同的签名,这也意味着不需要强制转换


推荐阅读