【问题标题】:Angular TestBed.inject type error when injecting into a spy注入间谍时出现 Angular TestBed.inject 类型错误
【发布时间】:2020-03-16 14:51:11
【问题描述】:

我想以与角度示例所示相同的方式将服务注入 serviceSpy。 角 9 https://angular.io/guide/testing#service-tests

let masterService: MasterService;
let valueServiceSpy: jasmine.SpyObj<ValueService>;

beforeEach(() => {
const spy = jasmine.createSpyObj('ValueService', ['getValue']);

TestBed.configureTestingModule({
// Provide both the service-to-test and its (spy) dependency
providers: [
  MasterService,
  { provide: ValueService, useValue: spy }
]
});
// Inject both the service-to-test and its (spy) dependency
masterService = TestBed.inject(MasterService);
valueServiceSpy = TestBed.inject(ValueService);
});

intellij 告诉我这个错误 TS2322:类型“ValueService”不可分配给类型 SpyObj&lt;ValueService&gt;

有人可以帮忙吗?

【问题讨论】:

    标签: angular typescript testing


    【解决方案1】:

    我有同样的问题。根据https://github.com/angular/angular/issues/35944你可以

    valueServiceSpy = TestBed.inject(ValueService) as jasmine.SpyObj<ValueService>;
    

    它对我有用:)

    【讨论】:

    • 似乎是 Angular 的错误函数类型,因为 .inject() 返回 T 而不是 SpyObj&lt;T&gt;。但感谢您提供有效的类型转换提示。
    • 请记住,在这种情况下,语法 as&lt;T&gt;assertion 而不是 casting typescriptlang.org/docs/handbook/…跨度>
    【解决方案2】:

    我不知道您是否找到了解决方案,但我刚刚遇到了同样的问题,有人向我解释了 - 您必须先将其转换为未知,然后再将其转换为特定的东西。因此,如果您这样做,您将消除任何 TS 错误:

    valueServiceSpy = TestBed.inject(ValueService) as unknown as jasmine.SpyObj<ValueService>;
    

    你基本上是在说“我要传递一个你不知道的类型,但我希望你把它当作类型 blah blah”。这是我的理解。

    【讨论】:

      【解决方案3】:

      试试{ provide: ValueService, useValue: spy as any }

      【讨论】:

      • 没有帮助; testService = TestBed.inject(TestService);有问题吗……
      • 不应该是TestBed.get(TestService)TestBed.get(MasterService)TestBed.get(ValueService)
      • 已弃用并替换为注入 angular.io/api/core/testing/TestBed#get
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-04
      • 1970-01-01
      • 2017-12-12
      • 1970-01-01
      • 1970-01-01
      • 2017-05-29
      • 2018-07-21
      相关资源
      最近更新 更多