2016-11-17 74 views
2

Obeservable功能example.component.ts如何模拟业障中模拟服务的失败?

public name: string; 

this._cm.getData().subscribe(
    response => { 
     this.name = response.name; 
    }, 
    error => { 
     this.name = undefined; 
    } 

模拟服务

public _cm = { 
    data: { 
     name: 'test' 
    } 

    getData(): Observable<any> { 
     return Observable.of(this.data); 
    } 
} 

试验中观察到的example.component.spec.ts功能

// this test work corectly 
it('Should set name property to "test"',() => { 
    comp._cm.getData(); 
    expect(comp.name).toBe('test'); 
} 

it('Should set name property to undefined',() => { 
    comp._cm.getData(); 
    expect(comp.name).toBe('undefined'); 
} 

,但我不知道如何以模拟错误响应getData()

回答

2

您应该创建Observable使用Observable.create。有了这个,你可以控制何时发出错误。例如

public _cm = { 
    error: false, 
    data: { 
     name: 'test' 
    }, 
    getData(): Observable<any> { 
     return Observable.create(observer => { 
      if (this.error) { 
       observer.error(new Error("Boo")); 
      } else { 
       observer.next(this.data); 
      } 
      observer.complete(); 
     }) 
    } 
} 

现在你只需控制误差在测试

_cm.error = true; 
// do test 

另请参见:

+0

方法的工作,但我不得不更改: observer.onError to observer.error observer.onNext to observer.next observer.onComplete to observer.complete – Emerceen

+0

修复:).......... –