javascript - 仅模拟 Angular 服务的一种方法

标签 javascript angular typescript unit-testing jasmine

我有一个 Angular 服务,其中一个方法监听状态更改并返回可观察值,但同一服务的其他方法执行转换逻辑:

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”不再存在(在模拟的服务上),因此绑定(bind)到组件的数据是“未定义”。

有没有办法只模拟返回的可观察对象(stateListener)而不模拟同一服务的转换器方法?

最佳答案

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

您可以使用stubreturnValue以及Observable.of来 stub 它并返回可观察的。

关于javascript - 仅模拟 Angular 服务的一种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56105397/

相关文章:

javascript - 访问 Javascript 变量

java - 有没有办法发现 REST API 的所有端点?

javascript - 是否有可能以某种方式获取 html 元素作为图像在 Canvas 上渲染?

angular - 以理智的方式在 NGXS 中声明状态

Typescript 返回 typeof this

javascript - angularjs $http post 不发送数据

Angular Material 在多个表上进行不同的垫排序

android - 当应用程序不在前台时,Ionic/Cordova 触发应用程序操作

angular - 如何清除 Angular react 形式的 FormArray 值?

javascript - Visual Studio 2013 找不到从 typescript 编译的 javascript 文件?