我在服务中拥有此功能。
addTeamMember(data): Observable<any> {
if (data && typeof data === 'object') {
return this.http.post<any>(`${this.baseUrl}/members`,
JSON.stringify(data), { headers: this.headers });
} else {
return null;
}
}
我用以下方法对此进行测试:
it('should be create a new member', () => {
const data = {
name: 'Rodolfo Lenin',
lastName: 'xxxx xxxx',
rol: 'Front-End',
gender: 'male'
};
spy = spyOn(teamService, 'addTeamMember');
spy.and.callThrough();
spy.and.callFake(function() {});
spy.and.returnValue(data);
response = teamService.addTeamMember(of(data));
console.log(response, data, 'werr');
// expect(teamService.addTeamMember).toHaveBeenCalled();
expect(data).toEqual(jasmine.any(Object));
expect(response).toEqual(data); });
我不知道为什么测试范围无法识别此呼叫 enter image description here
答案 0 :(得分:0)
您正在拔出teamMember.addTeamMember
,这就是为什么它永远不会被调用的原因。您可以使用console.log
语句进行验证(或仅信任您的代码覆盖率工具;)
您应该将http.post
存根,以便对addTeamMember
进行实际测试。
话虽如此,您的测试没有意义:
可能的解决方案
it('creates a new member', () => {
const data = {
name: 'Rodolfo Lenin',
lastName: 'xxxx xxxx',
rol: 'Front-End',
gender: 'male'
};
spyOn(httpService, 'post').and.returnValue(of(data));
teamService.addTeamMember(data).subscribe((responseData) => {
expect(responseData).toEqual(data);
});
});
请注意,对于服务返回null的情况,您应该编写另一个测试。但是,由于传入了无效参数而返回null通常被认为是反模式。参见Is returning null bad design?
此外,Angular https://angular.io/guide/http#testing-http-requests
建议使用另一种方法这是关于检查参数https://blogs.msdn.microsoft.com/oldnewthing/20091210-00/?p=15713
的有趣对话