首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[Angular7][笑话]如何测试MergeMap?

[Angular7][笑话]如何测试MergeMap?
EN

Stack Overflow用户
提问于 2019-03-06 04:28:21
回答 1查看 802关注 0票数 1

我需要你的帮助:)

我使用了angular 7和Rxjs。对于测试,我使用了Jest。

我的组件使用2个httpClient之间的MergeMap,如下所示:

代码语言:javascript
复制
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:

代码语言:javascript
复制
createPost(post:Post) {
 return this.httpClient
   .post('http://localhost:8080/posts', {post: post}, {observe:  'response'}); 
}

getPost(url: any) {
   return this.httpClient.get<Post>(url);
}

我对我的组件创建了测试,就像这样:

代码语言:javascript
复制
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从未被调用过。

代码语言:javascript
复制
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?

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

感谢您的帮助;)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-06 12:16:29

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

试一试

代码语言:javascript
复制
spyOn(postService, 'createPost').and.returnValue(of({ headers: { get: _ => 'test' } }));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55011037

复制
相关文章

相似问题

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