angular - 在没有模拟的情况下从 Angular 测试 REST 服务器

标签 angular rest testing

我知道我应该使用模拟从 Angular 测试 REST 服务器,网络上有许多如何执行此操作的示例。但是假设我想在我完全控制的真实事物上测试服务。

这是工作模拟版本:

describe('SgformsService', () => {
  let sgformsService: SgformsService
  let httpMock: HttpTestingController

  beforeEach(() => {
      TestBed.configureTestingModule({
        providers: [SgformsService],
        imports: [HttpClientTestingModule]
      })
      httpMock = TestBed.get(HttpTestingController);
      sgformsService = TestBed.get(SgformsService);
    });

    it('should return a single item when mocked', () => {
    sgformsService.getSingle().subscribe(
      (sg: SgFormsBase) => {
        expect(sg.id).toEqual(34)
        expect(sg.pat_no).toEqual(1704)
      })
      const req = httpMock.expectOne(
        'http://localhost:8000/getsingle/Endoskopie/1631/2019-03-19/arzt/0', 'call to api');
      expect(req.request.method).toBe('GET');
      req.flush({
        id: 34,
        pat_no: 1704
      })
   });
});

如何重定向它以使用 REST 服务器而不是模拟服务器?下面的代码不起作用,因为我不知道如何为 SgformsService 创建 HttpClient。

describe('SgformsService without Mocking', () => {
  let sgformsService: SgformsService
  //let httpClient: HttpClient

  beforeEach(function() {
  //  httpClient = new HttpClient()
  //  sgformsService = new SgformsService(httpClient);
  });

  // https://angular.io/guide/testing#service-tests
  it('should return a single item from server',
    (done: DoneFn) => {
      sgformsService.getSingle().subscribe(
      (sg: SgFormsBase) => {
        expect(sg.id).toEqual(34)
        expect(sg.pat_no).toEqual(1704)
        done()
      });
    });

});

最佳答案

供他人引用,并在@peinarydevelopment和@Igor的帮助下:

import { TestBed } from '@angular/core/testing';
import { HttpClientModule } from '@angular/common/http';

import { SgformsService } from './sgforms.service';
import { SgFormsBase } from './sgforms-base';

describe('SgformsService', () => {
  let sgformsService: SgformsService

  beforeEach(() => {
      TestBed.configureTestingModule({
        providers: [SgformsService],
        imports: [HttpClientModule]
      })
      sgformsService = TestBed.get(SgformsService);
  });
  it('should return a single item', done =>  {
      sgformsService.getSingle().subscribe(
        (sg: SgFormsBase) => {
          expect(sg[0].id).toEqual(7)
          expect(sg[0].pat_no).toEqual(1631)
          done()
        });
      })
})

如果您想使用expect,则需要done 结构。如果您只想简单地记录结果,则不需要 done

另见 https://angular.io/guide/testing#service-tests

关于angular - 在没有模拟的情况下从 Angular 测试 REST 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55458060/

相关文章:

angular - 强制编译的 CSS 与 Angular 和 Webpack 内联

javascript - 我如何始终显示步长值以及描述 Angular Material 步长值的自定义文本?

java - 如何使用 "VersionOne SDK JAVA API"客户端创建缺陷

node.js - Testcafe:找不到资源的 dns 记录

javascript - 简单的 Jasmine 异步测试导致超时

python - 在与源同级的目录中运行测试

android - 无法构建 Ionic 2 项目

Angular 未捕获错误 : Can't resolve all parameters for service

java - 如何: Async Callbacks using SOAP/REST Web Services with Java

rest - 如何在Rest命令Delphi中转换CURL