zoukankan      html  css  js  c++  java
  • [Angular + Unit Testing] Mock HTTP Requests made with Angular’s HttpClient in Unit Tests

    In a proper unit test we want to isolate external dependencies as much as possible to guarantee a reliable test outcome. Http calls represent such external dependencies. Therefore, when testing our Angular components or services that rely on data retrieved via Http, we need to make sure to mock such calls and instead provide some fake data during the test execution. In this lesson we about the new HttpClientTestingModule and HttpTestingController that has been added in Angular v4.3.1 to make our life easier.

    Serivce:

    import { Injectable } from '@angular/core';
    import { Observable } from 'rxjs/Observable';
    import { HttpClient } from '@angular/common/http';
    
    export interface Person {
      name: string;
    }
    
    @Injectable()
    export class PeopleService {
    
      constructor(private http: HttpClient) {}
    
      fetchPeople(): Observable<Person[]> {
        return this.http
          .get<Person[]>('/api/v1/people');
      }
    
    }

    Spec:

    import { TestBed, inject } from '@angular/core/testing';
    import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
    import { PeopleService } from './people.service';
    
    describe('The PeopleService', () => {
    
      beforeEach(() => {
        TestBed.configureTestingModule({
          imports: [HttpClientTestingModule],
          providers: [
              PeopleService
          ]
        });
      });
    
      it('should fetch a list of people', inject(
        [PeopleService, HttpTestingController],
        (peopleService: PeopleService, httpMock: HttpTestingController) => {
    
        // execute the call
        peopleService
          .fetchPeople()
          .subscribe(people => {
            expect(people.length).toBe(2);
            expect(people[0].name).toBe('Juri');
          });
    
        const req = httpMock.expectOne('/api/v1/people', 'call to ppl api');
    
        expect(req.request.method).toBe('GET');
    
        req.flush([
          {
            name: 'xxx'
          },
          {
            name: 'xxx'
          }
        ]);
    
        httpMock.verify();
      }));
    
    });
  • 相关阅读:
    Mac 安装实用开发软件和日常软件清单
    Docker zabbix-agent 监控 docker tomcat 多实例
    zabbix 组件监控概述
    实况8操作指南
    关于哲哲跳舞这件小事儿
    左耳听风笔记摘要(11-12)程序的异常处理
    左耳听风笔记摘要(07-10)推荐书单/Go/Docker
    从零开始的vue学习笔记(一)
    简述Spark工作流程
    opengl简单入门实例
  • 原文地址:https://www.cnblogs.com/Answer1215/p/8448923.html
Copyright © 2011-2022 走看看