我正在订阅我的组件中的angular Location service:
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
。
如何创建一个存根或间谍,允许我传递位置的.subscribe功能。
Here is a similar question关于测试位置,但它指的是位置内的功能,而不是专门订阅位置。
非常感谢任何帮助。
答案 0 :(得分: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