gpt4 book ai didi

angular - 测试返回 Promise 的 Angular 2 服务

转载 作者:太空狗 更新时间:2023-10-29 19:30:13 25 4
gpt4 key购买 nike

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

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

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

最佳答案

使用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

另请参阅:

关于angular - 测试返回 Promise 的 Angular 2 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40886281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com