我需要您的帮助:)
我使用了angular 7和Rxjs。为了进行测试,我使用了Jest。
我的组件在2个httpClient之间使用MergeMap:
addPost() {
this.postService.createPost(post).pipe(
mergeMap( (response) => { return this.postService.getPost(response.headers.get('Location'));} )
).subscribe(
(post) => {
this.content =""; this.postService.addingPostToArray(post);
}, (error) => {
//todo
}
);
}
还有我的PostService:
createPost(post:Post) {
return this.httpClient
.post('http://localhost:8080/posts', {post: post}, {observe: 'response'});
}
getPost(url: any) {
return this.httpClient.get<Post>(url);
}
然后我像这样对组件进行测试:
it('should test addPost OK', () => {
postService = TestBed.get(PostService);
spyOn(postService, 'createPost').and.returnValue(of('test'));
spyOn(postService, 'getPost').and.returnValue(of('test'));
component.addPost();
expect(postService.createPost).toHaveBeenCalled();
expect(postService.getPost).toHaveBeenCalled();
});
但是问题是我的getPost从未被调用。
expect(spy).toHaveBeenCalled()
Expected spy to have been called, but it was not called.
131 |
132 | expect(postService.createPost).toHaveBeenCalled();
> 133 | expect(postService.getPost).toHaveBeenCalled();
如何测试mergeMap?
我希望我的解释不要太怪异:)
感谢您的帮助;)
答案 0 :(得分:0)
字符串测试将不具有属性response.headers.get('Location')。
尝试
spyOn(postService, 'createPost').and.returnValue(of({ headers: { get: _ => 'test' } }));