Angular 角度测试存根和打字脚本
我一直在关注angular并设置了一个测试,如下所示Angular 角度测试存根和打字脚本,angular,typescript,Angular,Typescript,我一直在关注angular并设置了一个测试,如下所示 let component: MyComponent; let fixture: ComponentFixture<MyComponent>; let activatedRoute: ActivatedRouteStub; beforeEach(async(() => { TestBed.configureTestingModule({ declarations: [MyComponent],
let component: MyComponent;
let fixture: ComponentFixture<MyComponent>;
let activatedRoute: ActivatedRouteStub;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [MyComponent],
providers: [
{provide: ActivatedRoute, useClass: ActivatedRouteStub},
{provide: Router, useClass: RouterStub}
]
});
}));
beforeEach(() => {
fixture = TestBed.createComponent(MyComponent);
component = fixture.componentInstance;
activatedRoute = fixture.debugElement.injector.get(ActivatedRoute);
activatedRoute.testParams = { email: email};
fixture.detectChanges(); // calls ngOnInit
});
在我执行npm安装来更新软件包(Angular 4和typescript)之前,这一切都进行得很顺利,现在我遇到了以下错误
TS2322: Type 'ActivatedRoute' is not assignable to type 'ActivatedRouteStub'.
Property 'subject' is missing in type 'ActivatedRoute'.
TS2339: Property 'parent' does not exist on type 'ActivatedRouteStub'.
你知道我为什么会突然出现这些错误吗?问题是它试图检索一个ActivatedRoute
类,并分配到ActivatedRouteStub
。解决方法如下:
let activatedRoute: ActivatedRouteStub;
...
activatedRoute = fixture.debugElement.injector.get(ActivatedRoute) as any;
我无法解释发生了什么变化(这可能取决于Angular和Typescript的早期版本)。但这些错误似乎很容易修复:a)将存根类的subject
属性设置为公共变量,b)将parent
属性添加到存根类中。然而,我一直在摸索编写测试的更好方法,您可能会考虑摆脱stubbed类,并使用RouterTestingModule
。只是一个猜测,以防它使您的测试更容易…如果您将:imports:[RouterTestingModule],
添加到测试床配置中,而不是声明Router
和ActivatedRoute
的各个提供程序,则可能会减少对存根的需求。“拿这句话来说吧,我仍然在用Angular2/Angular4进行测试。”SunilD。RouterTestingModule
中没有ActivatedRoute
存根。不幸的是,您仍然被迫手动模拟。请参阅ActivatedRouteStub
与ActivatedRoute
的接口不匹配。所以它不是一个完整的存根。
let activatedRoute: ActivatedRouteStub;
...
activatedRoute = fixture.debugElement.injector.get(ActivatedRoute) as any;