gpt4 book ai didi

angular - 单元测试将 Injector 与 Router(和其他服务)一起使用的父类

转载 作者:行者123 更新时间:2023-12-05 02:19:26 25 4
gpt4 key购买 nike

假设我有一个类 Foo,它为其所有派生类提供依赖注入(inject)服务,如下所示:

export class Foo {
protected fb : FormBuilder;
protected router : Router;
protected otherService : OtherService;
protected anotherService : AnotherService;

constructor(injector : Injector) {
this.fb = injector.get(FormBuilder);
this.router = injector.get(Router);
this.otherService = injector.get(OtherService);
this.anotherService = injector.get(AnotherService);
}

它具有派生自它的类:

export class Bar extends Foo {

constructor(injector : Injector){
super(injector);
}
}

如何正确地对父类进行单元测试,而不会遇到:

错误:无法解析 Foo 的所有参数:(?)

此刻我已经(尝试了很多,很多不同的东西来让它工作,但失败了:( )

export function main() {

describe('Class: Foo', () => {
beforeEach(async(() => {

TestBed.configureTestingModule({
providers: [
Foo,
Injector,
OtherService,
AnotherService
]
});
}));


it('should compile', inject([Foo, Injector], ( foo: Foo, injector : Injector ) => {
console.log("INJECTOR", injector);
expect(foo).toBeTruthy();
}));

});
}

我也试过这样使用 ReflectiveInjector.resolveAndCreate:

{
provide : Injector,
useValue: ReflectiveInjector.resolveAndCreate([FormBuilder, Router, OtherService, AnotherService])
}

但仍然没有骰子 :( 有什么想法吗?

最佳答案

看来你需要在 Foo 构造函数中为 Injector 添加 @Inject 装饰器

constructor(@Inject(Injector) injector: Injector) {

并正确配置TestBed。更准确地说,您必须导入 RouterModule,否则您将遇到 Router 的另一个问题:

TestBed.configureTestingModule({
imports: [
RouterModule.forRoot([])
],
providers: [
FormBuilder,
Foo,
OtherService,
AnotherService
]
});

您可以在 Plunker Example 中尝试实际操作

关于angular - 单元测试将 Injector 与 Router(和其他服务)一起使用的父类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42907338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com