2

我正在订阅我的组件中的角度位置服务,如下所示:

this.location.subscribe((ev:PopStateEvent) => {
    this.lastPoppedUrl = ev.url;
});

我希望能够与我的其他组件一起测试它。

现在我的 component.spec.ts 文件中有这个存根

let locationStub: Partial<Location>;
    locationStub = {
}

我将它作为提供者配置到我的 TestBed 中:

{provide: Location, useValue: locationStub }

当我运行时ng test,我得到这个错误this.location.subscribe is not a function

如何创建允许我传递 Location 的 .subscribe 功能的存根或间谍。

这是关于测试位置的类似问题,但它指的是位置内的功能,而不是专门订阅位置。

任何帮助深表感谢。

4

1 回答 1

3

你必须这样做:

beforeEach(() => {
    // Mock the location here instead, then pass to the NavBarComponent
    loc = jasmine.createSpyObj("Location", ["back", "subscribe"]);
    Location.subscribe.and.callFake(()=> Observable.of(your stubbed data to return here));
    testNavBarComponent = new NavBarComponent(loc);
});

因此,您必须添加subscribe到位置服务中的可用功能列表中。

重要的是在调用订阅时告诉返回什么,

这是Location.subscribe.and.callFake(()=> Observable.of(Your stubbed data to return here));为了什么。

我试图创建一个小演示:

这是它的链接,您可以根据需要尝试分叉和修改它。

https://stackblitz.com/edit/angular-testing-c25ezq?file=app/app.component.spec.ts

于 2018-03-30T22:59:59.553 回答