我们的应用程序使用HttpInterceptor将JSON属性从camel-case转换为snake-case。
我在karma.conf.js中配置pact并在那里设置pact代理。
对于我的测试,我使用TestBed:
TestBed.configureTestingModule({
imports: [
HttpClientModule
],
providers: [
EmployeeService,
{ provide: SERVER_URLS, useValue: TokenPactMock.SERVER_URLS() },
{ provide: HTTP_RETRY_ATTEMPTS, useValue: TokenMock.HTTP_RETRY_ATTEMPTS() }
],
});
这是我的考验:
const employeeService: EmployeeService = TestBed.get(EmployeeServiceService);
employeeService.addEmployee(employee).subscribe(response => {
expect(response.status).toEqual(201);
expect(response.body).toEqual(employee);
done();
}, error => {
done.fail(error);
});
此测试成功运行并生成pact文件。但是HttpInterceptor不是触发器,在PACT文件中我有驼峰式属性而不是蛇形。
有人知道如何使用PACT与HttpInterceptor?
我们找到了答案。这是我们对HttpClientModule和HttpClientTestingModule之间差异的误解。
在HttpClientModule中,我们必须显式定义我们的侦听器:
TestBed.configureTestingModule({
imports: [
HttpClientModule
],
providers: [
EmployeeService,
{ provide: SERVER_URLS, useValue: TokenPactMock.SERVER_URLS() },
{ provide: HTTP_INTERCEPTORS, useClass: HttpNamingInterceptor, multi: true },
{ provide: HTTP_RETRY_ATTEMPTS, useValue: TokenMock.HTTP_RETRY_ATTEMPTS() }
],
});