Угловой макет нескольких HTTP-вызовов - PullRequest
0 голосов
/ 03 июня 2018

У меня есть одна служба, которая возвращает ответный вызов нескольких http-вызовов.Я хотел проверить этот сценарий.

    class CommentService{
     addComments(){

let ob1 = Observable.of({});
    let ob2 = Observable.of({});
if(any condition)
        ob1 = {this.http.post('/url/1')};
if(any condition)
            ob2 = {this.http.post('/url/2'};
        return Observable.forkJoin(ob1,ob2)
           }
     }

Выше мой класс обслуживания.Как я могу издеваться над http звонками.

describe("CommentService", () => {
  let httpClient: HttpClient;
  let httpTestingController: HttpTestingController;
  beforeEach(() => {
    TestBed.configureTestingModule({
      imports: [HttpClientModule, HttpClientTestingModule],
      providers: [CommentService]
    });

    httpClient = TestBed.get(HttpClient);
    httpTestingController = TestBed.get(HttpTestingController);
  });

  it('addComments() call with normal and gate', inject([CommentService], (service: CommentService) => {


    let cmts = service.addComments();

    const reqGateComment = httpTestingController.expectOne('/url/1');
    expect(reqGateComment.request.method).toEqual('POST');

    const reqFactComment = httpTestingController.expectOne('/url/2');
    expect(reqFactComment.request.method).toEqual('POST');

    reqGateComment.flush({});
    reqFactComment.flush({});


    httpTestingController.verify();

    cmts.subscribe(results=>{
       expect(results.length).toEqual(2);
    });

  }));


});

Я получаю следующий тест не пройден.CommentService addFactsAndComments () вызов с обычным вызовом и логическим элементом

Ошибка: ожидается один соответствующий запрос для критериев "URL соответствия:

 '/url/1", found none.

1 Ответ

0 голосов
/ 04 июня 2018

Это потому, что вы оборачиваете наблюдаемые, созданные HttpClient, в новые, используя метод of.

Делая

joined$ = forkJoin(obs$(post1$),obs$(post2$))

Примечание: $обозначает наблюдаемое

Вы создаете новое наблюдаемое, которое:

  • Подписывается на внешнее obs$
  • Ожидает их завершения,
  • Собирает их последние испущенные значения (в данном случае post1 $ и post2 $)
  • Возвращает собранные значения в виде массива в порядке исходных потоков

Поскольку мы толькоподписан на внешний obs$, ваш тест не пройден с

'/ url / 1 ", не найден.

Поскольку мы никогда не подписывались на внутренний пост $Это означает, что запросы не были отправлены.

Измените метод обслуживания на:

addComments(){    
    const ob1 = this.http.post('/url/1');
    const ob2 = this.http.post('/url/2');

    return Observable.forkJoin(ob1,ob2);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...