angular - 在不模拟的情况下从 Angular 测试 REST 服务器
问题描述
我知道我应该使用模拟测试来自 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
.
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()
});
})
})
如果done
您想使用expect
. 如果您只想快速记录结果,done
则不需要。
推荐阅读
- vb.net - vb.net 查找winform中的所有子控件
- python - numpy.save 将 3D Numpy 数组与标签一起存储
- c# - C# 读取我的项目目录之外的文件
- tensorflow - 如何避免在 Tensorflow 中填充求和
- angularjs - 当按钮位于另一个控制器中时,使用带有 angular.js 控制器/模板的 dropzone 定义“可点击”
- kubernetes - pod升级运行时kubernetes触发?
- c++ - 在循环c ++中得到奇怪的结果
- javascript - JS:更改 ScrollTop 以显示浏览器宽度
- mysql - Telnet 到 mysql 被拒绝
- dialogflow-es - 用于条件块和响应的 DialogFlow CX 语法