我知道我应该使用模拟从 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
。
关于angular - 在没有模拟的情况下从 Angular 测试 REST 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55458060/