首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Angular7 Promises的Jasmine中获得模拟方法的覆盖率

如何在Angular7 Promises的Jasmine中获得模拟方法的覆盖率
EN

Stack Overflow用户
提问于 2019-01-19 23:38:54
回答 1查看 38关注 0票数 0

angular 7服务的Jasmine测试返回一个Promise对象,没有反映在代码覆盖率中。

代码语言:javascript
复制
@Injectable()
export class MyService {
constructor(private http:HttpClient,private httpService: HttpService) { 
}

getAllRecords (requestData: MyRequest): Promise<MyResponse> {
    return new Promise((resolve, reject) => {
        let url:string = `${ApiUrl.getUrl}`;
        this.httpService.makeHttpGetRequest(url, requestData)
        .subscribe((response) => {
            resolve(response.body);
        }, (error) => {
            reject();
        });
    });
}
}

测试

代码语言:javascript
复制
describe('MyService', function () {
let myService: MyService;
it('getAllRecords should have been called and return all records', (done) => {
        const spy = spyOn(myService, 'getAllRecords').and.returnValue(Promise.resolve({ id: 1 }));

        myService.getAllRecords(null);
        spy.calls.mostRecent().returnValue.then(() => {


            expect(myService.getAllRecords).toHaveBeenCalledWith(null);
            done();
        });
    })
})

测试正在通过,但没有反映在使用伊斯坦布尔创建的代码覆盖率报告中,注释测试没有反映代码覆盖率百分比。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-20 10:41:48

当您声明以下内容时,您正在截断该方法:

代码语言:javascript
复制
const spy = spyOn(myService, 'getAllRecords').and.returnValue(Promise.resolve({ id: 1 }));

该方法本身永远不会进入,因为您的spy代表它返回了一个不同的值。

我建议您不要在myService.getAllRecords()上设置间谍,而是在httpService.makeHttpGetRequest()上设置一个间谍,并返回一个冷的可观察对象,该对象立即以不同的值结束,以测试快乐路径和错误情况。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54268699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档