Do I need async block when testing a code which returns an Observable












0















I have written the following spec which tests sendMessage function. sendMessage sends a post message and returns an Observable<HttpEvent<any>>. So far I have not used async and the test case is getting passed. I am wondering if this is the right way to code the spec or should I use async (because there might be a race condition which isn't happening at the moment, making my test case pass)



fit('should return HttpEvent of type HttpResponse',()=>{ //should I change this to async block and use whenStable to wait for the Observable
//create our expectation what should be returned by the sendMessage. It should return Observable<HttpEvent<any>>
const responseData = { result: 'success', ['additional-info']: 'some data from server' };
let httpEvent:HttpResponse<any> = new HttpResponse<any>({body:responseData});
let helperService = TestBed.get(HelperService);//extract helper service
let httpMock = TestBed.get(HttpTestingController);
//call the sendMessage function and subscribe to its observable.
let result:Observable<HttpEvent<any>> = helperService.sendMessage('/someURL','someBody',httpOptions);
let subscription = result.subscribe((event:HttpEvent<any>)=>{
console.log('got response ',event);
//I want to test that sendMessage returns HttpEvent of type Response
expect(event).toBeTruthy();
let isResponseType0 = (event.type === 0);
let isResponseTypeResponse = (event.type === HttpEventType.Response);
expect(isResponseType0 || isResponseTypeResponse).toEqual(true);
});
//Below, TestRequest is a mock request that was received and is ready to be answered.
const mockReq:TestRequest = httpMock.expectOne('/someURL'); //Expect that a single request has been made which matches the given URL, and return its mock
console.log('mock request is ',mockReq);
expect(mockReq.cancelled).toBeFalsy();
expect(mockReq.request.responseType).toEqual('json');
//once mocking of sending request is done, mock receiving a response. This will trigger the logic inside subscribe function
mockReq.flush(httpEvent); //flush method provides dummy values as response

httpMock.verify();//verify checks that there are no outstanding requests;

});
});









share|improve this question



























    0















    I have written the following spec which tests sendMessage function. sendMessage sends a post message and returns an Observable<HttpEvent<any>>. So far I have not used async and the test case is getting passed. I am wondering if this is the right way to code the spec or should I use async (because there might be a race condition which isn't happening at the moment, making my test case pass)



    fit('should return HttpEvent of type HttpResponse',()=>{ //should I change this to async block and use whenStable to wait for the Observable
    //create our expectation what should be returned by the sendMessage. It should return Observable<HttpEvent<any>>
    const responseData = { result: 'success', ['additional-info']: 'some data from server' };
    let httpEvent:HttpResponse<any> = new HttpResponse<any>({body:responseData});
    let helperService = TestBed.get(HelperService);//extract helper service
    let httpMock = TestBed.get(HttpTestingController);
    //call the sendMessage function and subscribe to its observable.
    let result:Observable<HttpEvent<any>> = helperService.sendMessage('/someURL','someBody',httpOptions);
    let subscription = result.subscribe((event:HttpEvent<any>)=>{
    console.log('got response ',event);
    //I want to test that sendMessage returns HttpEvent of type Response
    expect(event).toBeTruthy();
    let isResponseType0 = (event.type === 0);
    let isResponseTypeResponse = (event.type === HttpEventType.Response);
    expect(isResponseType0 || isResponseTypeResponse).toEqual(true);
    });
    //Below, TestRequest is a mock request that was received and is ready to be answered.
    const mockReq:TestRequest = httpMock.expectOne('/someURL'); //Expect that a single request has been made which matches the given URL, and return its mock
    console.log('mock request is ',mockReq);
    expect(mockReq.cancelled).toBeFalsy();
    expect(mockReq.request.responseType).toEqual('json');
    //once mocking of sending request is done, mock receiving a response. This will trigger the logic inside subscribe function
    mockReq.flush(httpEvent); //flush method provides dummy values as response

    httpMock.verify();//verify checks that there are no outstanding requests;

    });
    });









    share|improve this question

























      0












      0








      0








      I have written the following spec which tests sendMessage function. sendMessage sends a post message and returns an Observable<HttpEvent<any>>. So far I have not used async and the test case is getting passed. I am wondering if this is the right way to code the spec or should I use async (because there might be a race condition which isn't happening at the moment, making my test case pass)



      fit('should return HttpEvent of type HttpResponse',()=>{ //should I change this to async block and use whenStable to wait for the Observable
      //create our expectation what should be returned by the sendMessage. It should return Observable<HttpEvent<any>>
      const responseData = { result: 'success', ['additional-info']: 'some data from server' };
      let httpEvent:HttpResponse<any> = new HttpResponse<any>({body:responseData});
      let helperService = TestBed.get(HelperService);//extract helper service
      let httpMock = TestBed.get(HttpTestingController);
      //call the sendMessage function and subscribe to its observable.
      let result:Observable<HttpEvent<any>> = helperService.sendMessage('/someURL','someBody',httpOptions);
      let subscription = result.subscribe((event:HttpEvent<any>)=>{
      console.log('got response ',event);
      //I want to test that sendMessage returns HttpEvent of type Response
      expect(event).toBeTruthy();
      let isResponseType0 = (event.type === 0);
      let isResponseTypeResponse = (event.type === HttpEventType.Response);
      expect(isResponseType0 || isResponseTypeResponse).toEqual(true);
      });
      //Below, TestRequest is a mock request that was received and is ready to be answered.
      const mockReq:TestRequest = httpMock.expectOne('/someURL'); //Expect that a single request has been made which matches the given URL, and return its mock
      console.log('mock request is ',mockReq);
      expect(mockReq.cancelled).toBeFalsy();
      expect(mockReq.request.responseType).toEqual('json');
      //once mocking of sending request is done, mock receiving a response. This will trigger the logic inside subscribe function
      mockReq.flush(httpEvent); //flush method provides dummy values as response

      httpMock.verify();//verify checks that there are no outstanding requests;

      });
      });









      share|improve this question














      I have written the following spec which tests sendMessage function. sendMessage sends a post message and returns an Observable<HttpEvent<any>>. So far I have not used async and the test case is getting passed. I am wondering if this is the right way to code the spec or should I use async (because there might be a race condition which isn't happening at the moment, making my test case pass)



      fit('should return HttpEvent of type HttpResponse',()=>{ //should I change this to async block and use whenStable to wait for the Observable
      //create our expectation what should be returned by the sendMessage. It should return Observable<HttpEvent<any>>
      const responseData = { result: 'success', ['additional-info']: 'some data from server' };
      let httpEvent:HttpResponse<any> = new HttpResponse<any>({body:responseData});
      let helperService = TestBed.get(HelperService);//extract helper service
      let httpMock = TestBed.get(HttpTestingController);
      //call the sendMessage function and subscribe to its observable.
      let result:Observable<HttpEvent<any>> = helperService.sendMessage('/someURL','someBody',httpOptions);
      let subscription = result.subscribe((event:HttpEvent<any>)=>{
      console.log('got response ',event);
      //I want to test that sendMessage returns HttpEvent of type Response
      expect(event).toBeTruthy();
      let isResponseType0 = (event.type === 0);
      let isResponseTypeResponse = (event.type === HttpEventType.Response);
      expect(isResponseType0 || isResponseTypeResponse).toEqual(true);
      });
      //Below, TestRequest is a mock request that was received and is ready to be answered.
      const mockReq:TestRequest = httpMock.expectOne('/someURL'); //Expect that a single request has been made which matches the given URL, and return its mock
      console.log('mock request is ',mockReq);
      expect(mockReq.cancelled).toBeFalsy();
      expect(mockReq.request.responseType).toEqual('json');
      //once mocking of sending request is done, mock receiving a response. This will trigger the logic inside subscribe function
      mockReq.flush(httpEvent); //flush method provides dummy values as response

      httpMock.verify();//verify checks that there are no outstanding requests;

      });
      });






      angular6






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 16 '18 at 5:55









      Manu ChadhaManu Chadha

      3,40721945




      3,40721945
























          0






          active

          oldest

          votes












          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53332203%2fdo-i-need-async-block-when-testing-a-code-which-returns-an-observable%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53332203%2fdo-i-need-async-block-when-testing-a-code-which-returns-an-observable%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Florida Star v. B. J. F.

          Danny Elfman

          Lugert, Oklahoma