Angular和HttpIntercepter中的契约消费者测试

时间:2019-02-13 07:42:38

标签: karma-runner pact

我们的应用程序使用HttpInterceptor将JSON属性从驼峰式转换为蛇形。

我在karma.conf.js中配置协定,并在那里设置协定代理。

对于我的测试,我使用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一起使用吗?

1 个答案:

答案 0 :(得分:0)

我们找到了答案。这是我们对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() }
    ],
});