Angular单元测试中的Observable.delay异步功能测试不起作用

时间:2017-10-23 03:03:42

标签: angular unit-testing jasmine rxjs observable

这是我的模拟服务,它写入延迟10ms:

class MockHttp {   
  post(url, body, option): Observable<Response> {
    let resOpt = new ResponseOptions({
      body: JSON.stringify({success: true})
    });
    let res: Response = new Response(resOpt);
    return Observable.of(res).delay(10);
  }
}

这是我的测试用例。

it('http post should get valid response without any param', fakeAsync(() => {
    let retVal = null;
    // note this is just blackbox testing. httpHelperSerivce.post() function is wrapper of http.post(p1, p2, p3), 
    httpHelperService.post('url', {a: 'a'}).subscribe(res => {
      console.log(res);
      retVal = res;
    });
    tick();
    expect(retVal).toEqual({success: true});
    discardPeriodicTasks();
  }));

测试不等待延迟。毫不拖延,它有效。

我的代码有什么问题吗? MockHttp的延迟时间超出当前区域?

1 个答案:

答案 0 :(得分:0)

我认为你的测试没有任何问题。

尝试Observable.timer(10).map(()=&gt; res).take(1)而不是Observable.of(res).delay(10)。

我在过去使用rx的.delay()和jasmine.clock()。tick()时遇到了一些问题