Angular 4 unit testing with jasmine /karma with http post mocking - how to fix

前端 未结 4 832
抹茶落季
抹茶落季 2021-01-04 23:35

I have a service I want to unit test in angular 4 typescript jasmine.

Now, the http is doing a post , and it returns an identity, however

4条回答
  •  梦谈多话
    2021-01-04 23:43

    In order to achieve what you want, the mock you need is a simple function that returns the same as the POST would do normally; another thing is your test should not hit the server for real, so you would need something like this (you might need to add other dependencies):

    import { HttpModule } from '@angular/http';
    import { TrackerFormService } from './tracker-form.service'
    import { Observable } from 'rxjs/Observable'
    
    describe('TrackerFormService', () => {
    // Mock the service like this and add all the functions you have in this fashion
    let trackerFormService: TrackerFormService,
      mockService = {
        addSession: jasmine.createSpy('addSession').and.returnValue(Observable.of('your session object mock goes here'))
      };
    
      beforeEach(() => {
        TestBed.configureTestingModule({
          imports: [HttpModule],
          providers: [{
            provide: TrackerFormService,
            useValue: mockService
          }]
        });
      });
    
      // Do this trick to inject the service every time, and just use `service` in your tests
      beforeEach(inject([TrackerFormService], (trackerFormService) => {
        service = trackerFormService;
      }));
    
      describe('addSession', () => {
        it('add session ', () => {
          let fakeResponse = null;
    
          // Call the service function and subscribe to it to catch the fake response coming from the mock.
          service.addSession().subscribe((value) => {
            // in here value will be whatever you put as returnValue (remember to keep the observable.of())
            fakeResponse = value;
          });
    
          // expects as in any test.
          expect(fakeResponse).toBeDefined();
          expect(fakeResponse).toBe('your session object mock goes here');
        });
      });
    });
    

提交回复
热议问题