编写Angular 8中的POST和GET服务的测试用例可以使用Jasmine和Karma进行单元测试。下面是一个示例,展示如何编写POST和GET服务的测试用例。
首先,创建一个名为my-service.service.spec.ts
的测试文件。
import { TestBed } from '@angular/core/testing';
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
import { MyService } from './my-service.service';
describe('MyService', () => {
let service: MyService;
let httpMock: HttpTestingController;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [HttpClientTestingModule],
providers: [MyService]
});
service = TestBed.get(MyService);
httpMock = TestBed.get(HttpTestingController);
});
afterEach(() => {
httpMock.verify();
});
it('should be created', () => {
expect(service).toBeTruthy();
});
it('should send a POST request', () => {
const dummyData = { name: 'John' };
const expectedResponse = { status: 'Success' };
service.postData(dummyData).subscribe(response => {
expect(response).toEqual(expectedResponse);
});
const req = httpMock.expectOne('http://api.example.com/post');
expect(req.request.method).toBe('POST');
req.flush(expectedResponse);
});
it('should send a GET request', () => {
const expectedResponse = { name: 'John' };
service.getData().subscribe(response => {
expect(response).toEqual(expectedResponse);
});
const req = httpMock.expectOne('http://api.example.com/get');
expect(req.request.method).toBe('GET');
req.flush(expectedResponse);
});
});
在上面的示例中,我们首先导入了HttpClientTestingModule
和HttpTestingController
模块,这些模块提供了用于模拟HTTP请求的工具。
在beforeEach
函数中,我们创建了MyService
的实例,并获取了HttpTestingController
的实例。
在每个测试用例之后,我们使用httpMock.verify()
来验证是否有未处理的HTTP请求。
第一个测试用例should be created
用于确保MyService
已被成功创建。
第二个测试用例should send a POST request
用于测试postData
方法是否发送了一个POST请求,并验证返回的数据是否正确。
第三个测试用例should send a GET request
用于测试getData
方法是否发送了一个GET请求,并验证返回的数据是否正确。
注意,我们使用httpMock.expectOne
来捕获实际的HTTP请求,并使用req.flush
来模拟返回的数据。
最后,运行测试用例可以使用ng test
命令。