[Angular7] [Jest] Как протестировать MergeMap? - PullRequest
1 голос
/ 05 марта 2019

Мне нужна ваша помощь:)

Я использовал угловые 7 и Rxjs. Для теста я использовал Jest.

У меня есть компонент, который использует MergeMap между двумя httpClient, вот так:

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();

Как я могу проверить объединенную карту?

Надеюсь, мои объяснения не слишком странные :) 1021 *

Спасибо за вашу помощь;)

1 Ответ

0 голосов
/ 06 марта 2019

Строковый тест не будет иметь свойства response.headers.get ('Location').

Попробуйте

spyOn(postService, 'createPost').and.returnValue(of({ headers: { get: _ => 'test' } }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...