gpt4 book ai didi

angular - [Angular7][Jest] 如何测试 MergeMap?

转载 作者:行者123 更新时间:2023-11-28 20:48:55 24 4
gpt4 key购买 nike

我需要你的帮助:)

我使用了 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
}
);
}

还有我的邮政服务:

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 ?

我希望我的解释不会太奇怪:)

感谢您的帮助;)

最佳答案

字符串测试不会有属性 response.headers.get('Location')。

尝试

spyOn(postService, 'createPost').and.returnValue(of({ headers: { get: _ => 'test' } }));

关于angular - [Angular7][Jest] 如何测试 MergeMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55011037/

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