or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

async-mocking.mdcore-mocking.mdhttp-mocking.mdindex.mdspy-functions.mdsync-mocking.mdsystem-mocking.md

http-mocking.mddocs/

0

# HTTP Request Mocking

1

2

Comprehensive HTTP and HTTPS request mocking capabilities for testing network-dependent code. Mock complete request/response cycles with custom data, headers, status codes, and error conditions.

3

4

## Capabilities

5

6

### Mock HTTP Requests

7

8

Mock `http.request()` and `http.get()` calls with custom responses.

9

10

```typescript { .api }

11

/**

12

* Mock http.request() calls with custom responses

13

* @param url - URL pattern to match (string, RegExp, URL, or object)

14

* @param data - Response data (string, Buffer, or Readable stream)

15

* @param headers - Response headers including optional statusCode

16

* @param delay - Response delay in milliseconds (default: 0)

17

*/

18

function mockHttpRequest(url: RequestURL, data: ResponseData, headers?: Record<string, any>, delay?: number): void;

19

20

type RequestURL = string | RegExp | URL | object;

21

type ResponseData = string | Buffer | Readable;

22

```

23

24

**Usage Examples:**

25

26

```typescript

27

import http from "node:http";

28

import { mockHttpRequest } from "mm";

29

30

// Mock simple string response

31

mockHttpRequest("/api/users", "[]", { "content-type": "application/json" });

32

33

http.get({ path: "/api/users" }, (res) => {

34

console.log(res.statusCode); // => 200 (default)

35

console.log(res.headers["content-type"]); // => "application/json"

36

37

let body = "";

38

res.on("data", chunk => body += chunk);

39

res.on("end", () => console.log(body)); // => "[]"

40

});

41

42

// Mock with custom status code

43

mockHttpRequest("/api/error", "Not Found", {

44

statusCode: 404,

45

"content-type": "text/plain"

46

});

47

48

// Mock with Buffer data

49

mockHttpRequest("/api/binary", Buffer.from("binary data"), {

50

"content-type": "application/octet-stream"

51

});

52

53

// Mock with delay simulation

54

mockHttpRequest("/api/slow", "delayed response", {}, 2000); // 2 second delay

55

```

56

57

### Mock HTTPS Requests

58

59

Mock `https.request()` and `https.get()` calls with custom responses.

60

61

```typescript { .api }

62

/**

63

* Mock https.request() calls with custom responses

64

* @param url - URL pattern to match (string, RegExp, URL, or object)

65

* @param data - Response data (string, Buffer, or Readable stream)

66

* @param headers - Response headers including optional statusCode

67

* @param delay - Response delay in milliseconds (default: 0)

68

*/

69

function mockHttpsRequest(url: RequestURL, data: ResponseData, headers?: Record<string, any>, delay?: number): void;

70

```

71

72

**Usage Examples:**

73

74

```typescript

75

import https from "node:https";

76

import { mockHttpsRequest } from "mm";

77

78

// Mock HTTPS API response

79

mockHttpsRequest("/secure/api", '{"secure": true}', {

80

"content-type": "application/json",

81

"x-security": "encrypted"

82

});

83

84

https.get({ path: "/secure/api" }, (res) => {

85

let body = "";

86

res.on("data", chunk => body += chunk);

87

res.on("end", () => {

88

const data = JSON.parse(body);

89

console.log(data.secure); // => true

90

});

91

});

92

```

93

94

### URL Pattern Matching

95

96

HTTP mocking supports flexible URL pattern matching:

97

98

```typescript

99

import { mockHttpRequest } from "mm";

100

101

// Exact string match

102

mockHttpRequest("/api/users", "users data");

103

104

// RegExp pattern matching

105

mockHttpRequest(/\/api\/users\/\d+/, '{"id": 123}');

106

107

// Object with host and path

108

mockHttpRequest(

109

{ url: "/api/data", host: "api.example.com" },

110

"host-specific data"

111

);

112

113

// Multiple patterns can be active simultaneously

114

mockHttpRequest("/api/posts", "posts data");

115

mockHttpRequest("/api/comments", "comments data");

116

```

117

118

### Response Data Types

119

120

Support for various response data formats:

121

122

```typescript

123

import fs from "node:fs";

124

import { Readable } from "node:stream";

125

import { mockHttpRequest } from "mm";

126

127

// String responses

128

mockHttpRequest("/api/text", "plain text response");

129

130

// Buffer responses

131

mockHttpRequest("/api/binary", Buffer.from([0x48, 0x65, 0x6c, 0x6c, 0x6f]));

132

133

// Readable stream responses

134

const stream = fs.createReadStream("large-file.json");

135

mockHttpRequest("/api/stream", stream);

136

137

// Array of data chunks (emitted sequentially)

138

mockHttpRequest("/api/chunked", [

139

"chunk 1",

140

"chunk 2",

141

"chunk 3"

142

]);

143

```

144

145

### Mock HTTP Request Errors

146

147

Mock HTTP requests to emit errors during request or response phases.

148

149

```typescript { .api }

150

/**

151

* Mock http.request() to emit request or response errors

152

* @param url - URL pattern to match

153

* @param reqError - Request phase error (optional)

154

* @param resError - Response phase error (optional)

155

* @param delay - Error delay in milliseconds (default: 0)

156

*/

157

function mockHttpRequestError(url: RequestURL, reqError?: MockError, resError?: MockError, delay?: number): void;

158

159

type MockError = Error | string;

160

```

161

162

**Usage Examples:**

163

164

```typescript

165

import http from "node:http";

166

import { mockHttpRequestError } from "mm";

167

168

// Mock request error (connection failure)

169

mockHttpRequestError("/api/fail", "Connection refused");

170

171

const req = http.request({ path: "/api/fail" }, (res) => {

172

// This callback won't be called

173

});

174

175

req.on("error", (err) => {

176

console.log(err.name); // => "MockHttpRequestError"

177

console.log(err.message); // => "Connection refused"

178

});

179

180

req.end();

181

182

// Mock response error (after successful connection)

183

mockHttpRequestError("/api/response-fail", null, "Response timeout");

184

185

const req2 = http.request({ path: "/api/response-fail" }, (res) => {

186

// Response received but will error

187

res.on("error", (err) => {

188

console.log(err.name); // => "MockHttpResponseError"

189

console.log(err.message); // => "Response timeout"

190

});

191

});

192

193

req2.end();

194

```

195

196

### Mock HTTPS Request Errors

197

198

Mock HTTPS requests to emit errors during request or response phases.

199

200

```typescript { .api }

201

/**

202

* Mock https.request() to emit request or response errors

203

* @param url - URL pattern to match

204

* @param reqError - Request phase error (optional)

205

* @param resError - Response phase error (optional)

206

* @param delay - Error delay in milliseconds (default: 0)

207

*/

208

function mockHttpsRequestError(url: RequestURL, reqError?: MockError, resError?: MockError, delay?: number): void;

209

```

210

211

**Usage Examples:**

212

213

```typescript

214

import https from "node:https";

215

import { mockHttpsRequestError } from "mm";

216

217

// Mock SSL/TLS error

218

mockHttpsRequestError("/secure/api", "SSL certificate error");

219

220

// Mock response parsing error

221

mockHttpsRequestError("/secure/data", null, "Invalid JSON response");

222

```

223

224

### Namespace Access

225

226

HTTP mocking functions are available through namespaced objects:

227

228

```typescript { .api }

229

// HTTP namespace object

230

const http: {

231

request: typeof mockHttpRequest;

232

requestError: typeof mockHttpRequestError;

233

};

234

235

// HTTPS namespace object

236

const https: {

237

request: typeof mockHttpsRequest;

238

requestError: typeof mockHttpsRequestError;

239

};

240

```

241

242

**Usage Examples:**

243

244

```typescript

245

import mm from "mm";

246

247

// Via namespace

248

mm.http.request("/api/data", "mock data");

249

mm.https.request("/secure/api", "secure data");

250

251

// Via named imports

252

import { http, https } from "mm";

253

http.request("/api/users", "users data");

254

https.requestError("/secure/fail", "Security error");

255

```

256

257

## Advanced Patterns

258

259

### Multiple Response Chunks

260

261

Simulate streaming responses with multiple data chunks:

262

263

```typescript

264

import { mockHttpRequest } from "mm";

265

266

mockHttpRequest("/api/stream", [

267

'{"users": [',

268

'{"id": 1, "name": "Alice"},',

269

'{"id": 2, "name": "Bob"}',

270

']}'

271

]);

272

273

// Response will emit 'data' events for each chunk

274

```

275

276

### Custom Response Headers

277

278

Control response headers including status codes:

279

280

```typescript

281

import { mockHttpRequest } from "mm";

282

283

mockHttpRequest("/api/custom", "response data", {

284

statusCode: 201,

285

"content-type": "application/json",

286

"x-custom-header": "custom-value",

287

"cache-control": "no-cache",

288

"etag": '"123456"'

289

});

290

```

291

292

### Request Interception

293

294

mm automatically intercepts matching requests and falls back to real requests for non-matching URLs:

295

296

```typescript

297

import { mockHttpRequest } from "mm";

298

299

// Only requests to /api/mock will be intercepted

300

mockHttpRequest("/api/mock", "mocked");

301

302

// Requests to other paths will use real HTTP

303

// http.get("/api/real") -> makes actual network request

304

// http.get("/api/mock") -> returns "mocked"

305

```

306

307

### Error Timing

308

309

Control when errors occur with delay parameters:

310

311

```typescript

312

import { mockHttpRequestError } from "mm";

313

314

// Immediate error

315

mockHttpRequestError("/api/immediate", "Immediate failure", null, 0);

316

317

// Delayed error (simulates timeout)

318

mockHttpRequestError("/api/timeout", "Request timeout", null, 5000);

319

320

// Response error after delay

321

mockHttpRequestError("/api/slow-fail", null, "Slow response error", 3000);

322

```

323

324

## Request Mocking Lifecycle

325

326

1. **Request Interception**: mm intercepts calls to `http.request()` and `https.request()`

327

2. **URL Matching**: Compares request options against registered URL patterns

328

3. **Response Generation**: Creates mock response object with specified data and headers

329

4. **Event Emission**: Emits appropriate events (`response`, `data`, `end`, `error`)

330

4. **Fallback**: Non-matching requests pass through to original HTTP functions

331

332

## Types

333

334

```typescript { .api }

335

// URL matching types

336

type RequestURL = string | RegExp | URL | object;

337

338

// Response data types

339

type ResponseData = string | Buffer | Readable;

340

341

// Error types for HTTP mocking

342

type MockError = Error | string;

343

344

// HTTP namespace interfaces

345

interface HttpMockNamespace {

346

request: typeof mockHttpRequest;

347

requestError: typeof mockHttpRequestError;

348

}

349

350

interface HttpsMockNamespace {

351

request: typeof mockHttpsRequest;

352

requestError: typeof mockHttpsRequestError;

353

}

354

```