如何解决已弃用:DI 正在实例化一个令牌“MockLocationStrategy”,该令牌继承了它的 @Injectable 装饰器但不提供它本身
在测试我的 Angular 应用程序时,我收到了弃用警告
'DEPRECATED:DI 正在实例化一个令牌“MocklocationStrategy”,该令牌继承了它的 @Injectable 装饰器,但本身不提供。 这将在 Angular 的未来版本中成为一个错误。请将@Injectable() 添加到“MocklocationStrategy”类中。'
下面是一个抛出警告的示例测试
describe('BookComponent',() => {
let component: BookComponent;
let fixture: ComponentFixture<BookIssueComponent>;
beforeEach(waitForAsync(() => {
Testbed.configureTestingModule({
imports: [
RouterTestingModule,],declarations: [BookComponent]
})
.compileComponents();
}));
beforeEach(() => {
fixture = Testbed.createComponent(BookComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create',() => {
expect(component).toBeTruthy();
});
});
我相信警告是因为我更新了我的软件包
Package Current Wanted Latest Location
@angular-devkit/architect 0.1102.11 0.1102.13 0.1200.1 node_modules/@angular-devkit/architect
@angular-devkit/build-angular 0.1102.11 0.1102.13 12.0.1 node_modules/@angular-devkit/build-angular
@angular-eslint/builder 4.2.0 4.3.0 12.0.0 node_modules/@angular-eslint/builder
@angular-eslint/eslint-plugin 4.2.0 4.3.0 12.0.0 node_modules/@angular-eslint/eslint-plugin
@angular-eslint/eslint-plugin-template 4.2.0 4.3.0 12.0.0 node_modules/@angular-eslint/eslint-plugin-template
@angular-eslint/schematics 4.2.0 4.3.0 12.0.0 node_modules/@angular-eslint/schematics
@angular-eslint/template-parser 4.2.0 4.3.0 12.0.0 node_modules/@angular-eslint/template-parser
@angular/animations 11.2.12 11.2.14 12.0.1 node_modules/@angular/animations
@angular/cdk 11.2.11 11.2.13 12.0.1 node_modules/@angular/cdk
@angular/cli 11.2.11 11.2.13 12.0.1 node_modules/@angular/cli
@angular/common 11.2.12 11.2.14 12.0.1 node_modules/@angular/common
@angular/compiler 11.2.12 11.2.14 12.0.1 node_modules/@angular/compiler
@angular/compiler-cli 11.2.12 11.2.14 12.0.1 node_modules/@angular/compiler-cli
@angular/core 11.2.12 11.2.14 12.0.1 node_modules/@angular/core
@angular/forms 11.2.12 11.2.14 12.0.1 node_modules/@angular/forms
@angular/language-service 11.2.12 11.2.14 12.0.1 node_modules/@angular/language-service
@angular/platform-browser 11.2.12 11.2.14 12.0.1 node_modules/@angular/platform-browser
@angular/platform-browser-dynamic 11.2.12 11.2.14 12.0.1 node_modules/@angular/platform-browser-dynamic
@angular/pwa 0.1102.11 0.1102.13 12.0.1 node_modules/@angular/pwa
@angular/router 11.2.12 11.2.14 12.0.1 node_modules/@angular/router
@angular/service-worker 11.2.12 11.2.14 12.0.1 node_modules/@angular/service-worker
@ngrx/component 11.1.1 11.1.1 12.0.0 node_modules/@ngrx/component
@ngrx/effects 11.1.1 11.1.1 12.0.0 node_modules/@ngrx/effects
@ngrx/entity 11.1.1 11.1.1 12.0.0 node_modules/@ngrx/entity
@ngrx/schematics 11.1.1 11.1.1 12.0.0 node_modules/@ngrx/schematics
@ngrx/store 11.1.1 11.1.1 12.0.0 node_modules/@ngrx/store
@ngrx/store-devtools 11.1.1 11.1.1 12.0.0 node_modules/@ngrx/store-devtools
@tinymce/tinymce-angular 4.2.2 4.2.3 4.2.3 node_modules/@tinymce/tinymce-angular
@types/jasmine 3.6.10 3.7.4 3.7.4 node_modules/@types/jasmine
@types/jasminewd2 2.0.8 2.0.9 2.0.9 node_modules/@types/jasminewd2
@types/node 15.0.1 15.6.0 15.6.0 node_modules/@types/node
@typescript-eslint/eslint-plugin 4.22.0 4.22.0 4.24.0 node_modules/@typescript-eslint/eslint-plugin
@typescript-eslint/parser 4.22.0 4.22.0 4.24.0 node_modules/@typescript-eslint/parser
bootstrap 4.6.0 4.6.0 5.0.1 node_modules/bootstrap
eslint 7.25.0 7.26.0 7.26.0 node_modules/eslint
eslint-plugin-import 2.22.1 2.22.1 2.23.2 node_modules/eslint-plugin-import
eslint-plugin-jsdoc 33.0.0 33.0.0 34.8.2 node_modules/eslint-plugin-jsdoc
google-libphonenumber 3.2.19 3.2.21 3.2.21 node_modules/google-libphonenumber
ng2-pdf-viewer 6.4.1 6.4.1 7.0.1 node_modules/ng2-pdf-viewer
rxjs 6.6.7 6.6.7 7.1.0 node_modules/rxjs
snyk 1.580.0 1.605.0 1.605.0 node_modules/snyk
tinymce 5.7.1 5.8.1 5.8.1 node_modules/tinymce
typescript 4.1.5 4.1.5 4.2.4 node_modules/typescript
我已尝试关注讨论 docs: RouterTestingModule should be added to Testing guide #34341,但我不知道如何解决此问题
但是我如何提供我的 RouterTesting 模块来解决这个问题?
解决方法
使用 withRoutes
提供路线并没有消除我的警告。而是为每个测试导入 MockLocationStrategy
为 LocationStrategy
提供 RouterTestingModule
对我有用。
import { MockLocationStrategy } from '@angular/common/testing';
import { RouterTestingModule } from '@angular/router/testing';
然后在TestBed.configureTestingModule
{ provide: LocationStrategy,useClass: MockLocationStrategy },
我在这里找到了答案:https://github.com/angular/angular/issues/34341#issuecomment-864281500
,我是在@angular/cli 12.0.3 上得到的。将@angular/cli 更新到 12.1.0 为我解决了这个问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。