仅模拟Angular服务的一种方法

时间:2019-05-13 03:25:19

标签: javascript angular typescript unit-testing jasmine

我有一个角度服务,其中一种方法侦听状态变化并返回可观察到的结果,但是同一服务的其他方法执行转换逻辑:

ngOnInit() {
    this.isLoading = true;
    this.myService.stateListener().subscribe((res: any) => {
        this.data = this.myService.transformModel(res);
        this.isLoading = false;
        this.cd.detectChanges();
    }, (err) => {
        this.errMessage = 'Data could not be loaded';
        this.isLoading = false;
    });
}

在测试中,我模拟状态侦听器以返回特定的可测试数据,如下所示:

const mockService = jasmine.createSpyObj('myService', ['stateListener']);
mockService.stateListener.and.returnValue(of({
    number: 107,
    mock: someMock
}));

问题在于,因为我已经模拟了服务,所以方法'transformerModel'不再存在(在模拟服务上),因此绑定到组件的数据是'undefined'。

是否有一种方法可以只模拟返回的observable(stateListener),而不模拟相同服务的转换器方法?

1 个答案:

答案 0 :(得分:1)

let testData={}// stubbed response of Observable or Model
let dataStub=fixture.debugElement.injector.get(MyService);
spyOn(dataStub, 'stateListener').and.returnValue(
      Observable.of(testData)
    );

您可以使用stubreturnValueObservable.of对其进行存根并返回可观察对象。