如何覆盖 Jasmine for Angular7 Promises 中的模拟方法
How to get coverage for mocked methods in Jasmine for Angular7 Promises
Jasmine 测试 angular 7 服务,returns Promise 对象未反映在代码覆盖率中。
@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();
});
});
}
}
测试
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();
});
})
})
测试通过但未反映在使用 Istanbul 创建的代码覆盖率报告中,评论测试未反映代码覆盖率。
你在声明时存根方法:
const spy = spyOn(myService, 'getAllRecords').and.returnValue(Promise.resolve({ id: 1 }));
方法本身将永远不会被输入,因为您的间谍 return代表它有一个不同的值。
我建议不要在 myService.getAllRecords()
上设置 spy,而是在 httpService.makeHttpGetRequest()
和 return 上设置 spy 一个冷的可观察对象,它会立即完成各种值来测试快乐路径和错误案例。
Jasmine 测试 angular 7 服务,returns Promise 对象未反映在代码覆盖率中。
@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();
});
});
}
}
测试
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();
});
})
})
测试通过但未反映在使用 Istanbul 创建的代码覆盖率报告中,评论测试未反映代码覆盖率。
你在声明时存根方法:
const spy = spyOn(myService, 'getAllRecords').and.returnValue(Promise.resolve({ id: 1 }));
方法本身将永远不会被输入,因为您的间谍 return代表它有一个不同的值。
我建议不要在 myService.getAllRecords()
上设置 spy,而是在 httpService.makeHttpGetRequest()
和 return 上设置 spy 一个冷的可观察对象,它会立即完成各种值来测试快乐路径和错误案例。