如何使用Angular2 unit-test Service等待Observable函数返回

时间:2018-03-26 08:16:43

标签: angular unit-testing

it('should push data into the array bank and get the array to count total length', async () =>  {
        const data = ... ;
        service.addData(data);

        await service.getData()
            .subscribe((data) => {
                console.log(data.length); <--- this never gets fired
                expect(data.length).toBe(5);
            });

    });

问题是测试将触发subscribe方法,它永远不会获得正确的数据长度。如何告诉jasmine等待数据返回然后进行检查?

目前,虽然我知道data.length不是5,但此测试会一直通过。

public getData(): Observable<IData> {
    return this.data;
}

1 个答案:

答案 0 :(得分:2)

试试这个:

假设service.data = Observable.of([1,2,3,4,5]);

it('should ...' , () =>  {
  let result = null;

  service.getData().subscribe(data => result = data);

  expect(result.length).toBe(5);
});

如果不使用([....])存在service.data,则必须在调用service.getData()之前放置订阅块。

相关问题