Implementation:DevExpress Testcafe RequestHook TypeDefs
| Knowledge Sources | |
|---|---|
| Domains | Type_Definitions, Testing, Request_Interception |
| Last Updated | 2026-02-12 12:00 GMT |
Overview
Concrete TypeScript type declarations for TestCafe's request interception APIs: RequestHook, RequestLogger, and RequestMock.
Description
This file defines the type declarations for TestCafe's request hooks. RequestHook is the abstract base class for custom hooks with onRequest and onResponse methods. RequestLogger records HTTP traffic with filter rules and provides query methods (contains, count, requests). RequestMock enables response mocking with a fluent builder API (onRequestTo().respond()). These hooks are attached to tests or fixtures and can be dynamically managed via t.addRequestHooks().
Usage
Use these types when implementing custom request hooks, logging HTTP traffic in tests, or mocking API responses.
Code Reference
Source Location
- Repository: DevExpress_Testcafe
- File: ts-defs-src/test-api/request-hook.d.ts
- Lines: 1-215
Signature
declare class RequestHook {
constructor(requestFilterRules?: Array<any>, responseEventConfigureOpts?: object);
onRequest(event: object): Promise<void>;
onResponse(event: object): Promise<void>;
}
declare class RequestLogger extends RequestHook {
constructor(filter?: string | RegExp | object | ((req: any) => boolean),
options?: { logRequestHeaders?: boolean; logRequestBody?: boolean;
logResponseHeaders?: boolean; logResponseBody?: boolean;
stringifyResponseBody?: boolean; stringifyRequestBody?: boolean; });
contains(predicate: (request: LoggedRequest) => boolean): Promise<boolean>;
count(predicate: (request: LoggedRequest) => boolean): Promise<number>;
requests: LoggedRequest[];
clear(): void;
}
declare class RequestMock {
onRequestTo(filter: string | RegExp | object | ((req: any) => boolean)): RequestMock;
respond(body?: object | string | Function, statusCode?: number, headers?: object): RequestMock;
}
Import
import { RequestHook, RequestLogger, RequestMock } from 'testcafe';
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| filter | string, RegExp, object, function | No | URL or predicate to match requests |
| options | object | No | Logger options (log headers, body, etc.) |
| body | object, string, Function | No | Mock response body |
| statusCode | number | No | Mock response status code |
Outputs
| Name | Type | Description |
|---|---|---|
| RequestLogger.requests | LoggedRequest[] | Array of recorded request/response pairs |
| RequestLogger.contains() | Promise<boolean> | Whether any logged request matches predicate |
| RequestMock | RequestMock | Chainable mock builder |
Usage Examples
import { RequestLogger, RequestMock, RequestHook } from 'testcafe';
// 1. Request Logger - record API calls
const logger = RequestLogger(/api\/users/, {
logRequestBody: true,
logResponseBody: true,
stringifyResponseBody: true,
});
fixture('Request Hooks').page('https://example.com');
test.requestHooks(logger)('Log API calls', async (t: TestController) => {
await t.click('#load-users');
await t.expect(logger.count(r => r.response.statusCode === 200)).eql(1);
console.log(logger.requests[0].response.body);
});
// 2. Request Mock - mock API responses
const mock = RequestMock()
.onRequestTo('https://api.example.com/users')
.respond({ users: [{ id: 1, name: 'Test' }] }, 200, {
'content-type': 'application/json',
});
test.requestHooks(mock)('Mocked API', async (t: TestController) => {
await t.click('#load-users');
await t.expect(Selector('.user').count).eql(1);
});