测试返回Promise的Angular 2服务

时间:2016-11-30 10:44:38

标签: angular testing asynchronous

我正在尝试对一个应该使用假的http后端的服务进行单元测试,该服务由Angular的内存数据服务提供。这是相关的代码:

statusBarHidden

问题是我不能使用Jasmine的完成回调来处理异步 service.getCars()调用,因为inject函数的工作原理。我既不能使用 async 测试助手,因为它无法使用promises。所以我不知道如何等待承诺解决 - 测试只是在没有达到期待的情况下运行。

1 个答案:

答案 0 :(得分:1)

使用async,它将包装一个区域,等待所有异步任务在测试完成之前完成。

import { async } from '@angular/core/testing';

                                   // !!!!!!!
it('should return a resolved Promise', async(inject([DataService], (service: DataService)=>{
  service.getCars().then((value) => {
    expect(value.length).toBe(3);
  });
})));

另一个选择是根本不使用inject。您可以从TestBed获取服务。这是很多清洁工

let service: DataService;

beforeEach(() => {
  const injector = TestBed.configureTestingModule({});
  service = injector.get(DataService);
});

不需要inject,而且不那么冗长。您现在可以使用done。或者,如果您愿意,仍然使用Angular方式,并使用async

另见: