Angular / Ivy 错误:错误:令牌注入令牌 XXXXXXXXX 缺少 ?prov 定义

Sim*_*ver 6 angular angular-ivy

更新到 Angular 9 / Ivy 编译器后出现错误

ERROR Error: Token InjectionToken XXXXXXXXX is missing a ?prov definition.
    at injectableDefOrInjectorDefFactory (vendor.js:47105)
    at providerToFactory (vendor.js:47210)
    at resolveProvider$1 (vendor.js:56430)
Run Code Online (Sandbox Code Playgroud)

Sim*_*ver 8

如果您尝试使用undefined或显式覆盖继承的可注入对象,则可能会发生这种情况null

在 Angular 8 中,这没问题

    {
        provide: AMBIENT_CART,
        useExisting: undefined
    }
Run Code Online (Sandbox Code Playgroud)

使用 Angular 9,它需要更改为

    {
        provide: AMBIENT_CART,
        useValue: undefined
    }
Run Code Online (Sandbox Code Playgroud)

如果你很好奇:在我的情况下,我这样做是出于安全原因,以确保我没有错误地使用这种特殊的注射剂。


小智 5

从 Angular 8 --> 9 升级后运行 ng test 时,我遇到了同样的错误:\n“错误:Token InjectionToken apiToken 缺少 \xc9\xb5prov 定义。”

\n\n

我的解决方案非常简单——规范文件中有一个拼写错误,我猜这在 Angular 8 中无关紧要,但在 Angular 9 中却如此?下面的最后一个“useValue”实例被错误地写成了“usevalue”。这么莫名其妙的错误!

\n\n
TestBed.configureTestingModule({ \n    imports: [ HttpClientTestingModule ], \n    providers: [ \n        { provide: ApiService, useValue: apiService }, \n        { provide: ProductsApiService, useValue: productsService }, \n        { provide: apiToken, useValue: mockApiToken } \n    ] \n});\n
Run Code Online (Sandbox Code Playgroud)\n