fast-api-tester 1.0.11 → 1.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,5 @@
1
1
  export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
2
+ export type AssertionMode = 'hard' | 'soft';
2
3
  export interface RequestOptions {
3
4
  headers?: Record<string, string>;
4
5
  query?: Record<string, string | number | boolean>;
@@ -36,13 +37,20 @@ export declare class ApiResponse<T = unknown> implements ApiResponseData<T> {
36
37
  body: T;
37
38
  latencyMs: number;
38
39
  lastExecutionRecord?: TestExecutionRecord;
39
- constructor(data: ApiResponseData<T>);
40
+ private assertionMode;
41
+ constructor(data: ApiResponseData<T>, mode?: AssertionMode);
42
+ setAssertionMode(mode: AssertionMode): this;
43
+ /** Soft assertions log failure to the report but continue test execution */
44
+ soft(): this;
45
+ /** Hard assertions immediately abort suite on failure */
46
+ hard(): this;
47
+ /** Internal handler to route failure based on hard/soft mode */
48
+ private handleAssertionFailure;
40
49
  expectLatencyUnder(maxLatencyMs: number): this;
50
+ expectStatus(expectedCode: number): this;
51
+ expectStatusOk(): this;
52
+ expectBodyContains(substring: string): this;
41
53
  }
42
- /**
43
- * Utility to parse intervals like "1m", "3m", "5m", "30m", or "10s" into milliseconds.
44
- * Checks both environment variables (INTERVAL=1m) and CLI arguments (--interval 1m).
45
- */
46
54
  export declare function parseCliInterval(): {
47
55
  raw: string;
48
56
  ms: number;
@@ -55,6 +63,8 @@ export declare class ApiEngine {
55
63
  private historyFilePath;
56
64
  private autoReportEnabled;
57
65
  private simulatedLatencyMs;
66
+ private defaultAssertionMode;
67
+ setAssertionMode(mode: AssertionMode): this;
58
68
  setBaseUrl(url: string): this;
59
69
  setHeader(key: string, value: string): this;
60
70
  simulateNetwork(profile: NetworkProfile): this;
@@ -70,13 +80,11 @@ export declare class ApiEngine {
70
80
  delete<T = unknown>(path: string, options?: Omit<RequestOptions, 'body'>): Promise<ApiResponse<T>>;
71
81
  request<T = unknown>(method: HttpMethod, path: string, options?: RequestOptions): Promise<ApiResponse<T>>;
72
82
  /**
73
- * Continuous heartbeat loop. Clears internal records each run, executes the target test function,
74
- * generates HTML reports, and sleeps for the parsed interval.
83
+ * Throws a hard abort error if any tests failed during the execution cycle.
84
+ * Best used at the end of a soft-assertion test suite.
75
85
  */
86
+ assertAll(): void;
76
87
  startHeartbeat(testFn: () => Promise<void>): Promise<never>;
77
- /**
78
- * Persists current run to history file and returns all past execution history
79
- */
80
88
  private updateAndGetHistory;
81
89
  private generateHtmlReport;
82
90
  destroy(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"apiEngine.d.ts","sourceRoot":"","sources":["../src/apiEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apiEngine.d.ts","sourceRoot":"","sources":["../src/apiEngine.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;AAGrE,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;AAG5C,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IAClD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,OAAO;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IACvD,IAAI,EAAE,CAAC,CAAC;IACR,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;AASvE,qBAAa,WAAW,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,eAAe,CAAC,CAAC,CAAC;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IACvD,IAAI,EAAE,CAAC,CAAC;IACR,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAGjD,OAAO,CAAC,aAAa,CAAyB;IAE9C,YAAY,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,IAAI,GAAE,aAAsB,EAMjE;IAGM,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAGjD;IAED,4EAA4E;IACrE,IAAI,IAAI,IAAI,CAElB;IAED,yDAAyD;IAClD,IAAI,IAAI,IAAI,CAElB;IAED,gEAAgE;IAChE,OAAO,CAAC,sBAAsB;IAgB9B,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAW7C;IAGD,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAOvC;IAED,cAAc,IAAI,IAAI,CAOrB;IAED,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAQ1C;CAEF;AAiBD,wBAAgB,gBAAgB,IAAI;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA2BrE;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,cAAc,CAEpB;IAEF,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,gBAAgB,CAA8B;IACtD,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,iBAAiB,CAAiB;IAC1C,OAAO,CAAC,kBAAkB,CAAa;IAGvC,OAAO,CAAC,oBAAoB,CAAyB;IAE9C,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAGjD;IAGM,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAGnC;IAEM,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAGjD;IAEM,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAOpD;IAEM,eAAe,CAAC,OAAO,EAAE;QAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,IAAI,CAKP;IAEM,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,2BAE3E;IAEM,IAAI,CAAC,CAAC,GAAG,OAAO,EACrB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,2BAGvC;IAEM,GAAG,CAAC,CAAC,GAAG,OAAO,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,2BAGvC;IAEM,KAAK,CAAC,CAAC,GAAG,OAAO,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,2BAGvC;IAEM,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,2BAE9E;IAEY,OAAO,CAAC,CAAC,GAAG,OAAO,EAC9B,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CA+EzB;IAGD;;;OAGG;IACI,SAAS,IAAI,IAAI,CAWvB;IAGY,cAAc,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAwBvE;IAED,OAAO,CAAC,mBAAmB;IAsB3B,OAAO,CAAC,kBAAkB;IA2Mb,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAgBpC;CACF"}
package/dist/apiEngine.js CHANGED
@@ -8,30 +8,76 @@ const NETWORK_LATENCY_MAP = {
8
8
  '4G': 100, // 100ms artificial delay
9
9
  'None': 0,
10
10
  };
11
- // ----------------------------------------
12
11
  export class ApiResponse {
13
12
  statusCode;
14
13
  headers;
15
14
  body;
16
15
  latencyMs;
17
16
  lastExecutionRecord;
18
- constructor(data) {
17
+ // --- NEW: Default assertion mode for this response ---
18
+ assertionMode = 'hard';
19
+ constructor(data, mode = 'hard') {
19
20
  this.statusCode = data.statusCode;
20
21
  this.headers = data.headers;
21
22
  this.body = data.body;
22
23
  this.latencyMs = data.latencyMs;
24
+ this.assertionMode = mode;
23
25
  }
26
+ // --- NEW: Assertion Mode Chaining Helpers ---
27
+ setAssertionMode(mode) {
28
+ this.assertionMode = mode;
29
+ return this;
30
+ }
31
+ /** Soft assertions log failure to the report but continue test execution */
32
+ soft() {
33
+ return this.setAssertionMode('soft');
34
+ }
35
+ /** Hard assertions immediately abort suite on failure */
36
+ hard() {
37
+ return this.setAssertionMode('hard');
38
+ }
39
+ /** Internal handler to route failure based on hard/soft mode */
40
+ handleAssertionFailure(errorMsg) {
41
+ if (this.lastExecutionRecord) {
42
+ this.lastExecutionRecord.passed = false;
43
+ this.lastExecutionRecord.errorMsg = this.lastExecutionRecord.errorMsg
44
+ ? `${this.lastExecutionRecord.errorMsg} | ${errorMsg}`
45
+ : errorMsg;
46
+ }
47
+ if (this.assertionMode === 'hard') {
48
+ throw new Error(`[Hard Assertion Failed] ${errorMsg}`);
49
+ }
50
+ else {
51
+ console.warn(`⚠️ [Soft Assertion Failed] ${errorMsg}`);
52
+ }
53
+ }
54
+ // --------------------------------------------
24
55
  expectLatencyUnder(maxLatencyMs) {
25
56
  if (this.lastExecutionRecord) {
26
57
  this.lastExecutionRecord.slaLimitMs = maxLatencyMs;
27
58
  }
28
59
  if (this.latencyMs >= maxLatencyMs) {
29
- const errorMsg = `[SLA Violation] Expected response latency to be under ${maxLatencyMs}ms, but took ${this.latencyMs.toFixed(2)}ms.`;
30
- if (this.lastExecutionRecord) {
31
- this.lastExecutionRecord.passed = false;
32
- this.lastExecutionRecord.errorMsg = errorMsg;
33
- }
34
- throw new Error(errorMsg);
60
+ this.handleAssertionFailure(`[SLA Violation] Expected response latency under ${maxLatencyMs}ms, took ${this.latencyMs.toFixed(2)}ms.`);
61
+ }
62
+ return this;
63
+ }
64
+ // --- NEW: Additional Assertion Methods ---
65
+ expectStatus(expectedCode) {
66
+ if (this.statusCode !== expectedCode) {
67
+ this.handleAssertionFailure(`Expected HTTP status ${expectedCode}, received ${this.statusCode}.`);
68
+ }
69
+ return this;
70
+ }
71
+ expectStatusOk() {
72
+ if (this.statusCode < 200 || this.statusCode >= 300) {
73
+ this.handleAssertionFailure(`Expected 2xx OK status, received ${this.statusCode}.`);
74
+ }
75
+ return this;
76
+ }
77
+ expectBodyContains(substring) {
78
+ const bodyStr = typeof this.body === 'object' ? JSON.stringify(this.body) : String(this.body);
79
+ if (!bodyStr.includes(substring)) {
80
+ this.handleAssertionFailure(`Expected response body to contain "${substring}".`);
35
81
  }
36
82
  return this;
37
83
  }
@@ -49,10 +95,6 @@ function getOrCreatePool(origin) {
49
95
  }
50
96
  return pool;
51
97
  }
52
- /**
53
- * Utility to parse intervals like "1m", "3m", "5m", "30m", or "10s" into milliseconds.
54
- * Checks both environment variables (INTERVAL=1m) and CLI arguments (--interval 1m).
55
- */
56
98
  export function parseCliInterval() {
57
99
  let intervalStr = process.env.INTERVAL || null;
58
100
  if (!intervalStr) {
@@ -89,8 +131,14 @@ export class ApiEngine {
89
131
  reportOutputPath = 'test-report.html';
90
132
  historyFilePath = '.test-history.json';
91
133
  autoReportEnabled = true;
92
- // --- NEW: Track requested simulation latency ---
93
134
  simulatedLatencyMs = 0;
135
+ // --- NEW: Global Engine Assertion Mode ---
136
+ defaultAssertionMode = 'hard';
137
+ setAssertionMode(mode) {
138
+ this.defaultAssertionMode = mode;
139
+ return this;
140
+ }
141
+ // -----------------------------------------
94
142
  setBaseUrl(url) {
95
143
  this.baseUrl = url.endsWith('/') ? url.slice(0, -1) : url;
96
144
  return this;
@@ -99,7 +147,6 @@ export class ApiEngine {
99
147
  this.defaultHeaders[key.toLowerCase()] = value;
100
148
  return this;
101
149
  }
102
- // --- NEW: Configuration method for Network Throttling ---
103
150
  simulateNetwork(profile) {
104
151
  if (typeof profile === 'number') {
105
152
  this.simulatedLatencyMs = profile;
@@ -109,7 +156,6 @@ export class ApiEngine {
109
156
  }
110
157
  return this;
111
158
  }
112
- // --------------------------------------------------------
113
159
  configureReport(options) {
114
160
  if (options.enabled !== undefined)
115
161
  this.autoReportEnabled = options.enabled;
@@ -160,11 +206,9 @@ export class ApiEngine {
160
206
  }
161
207
  const pool = getOrCreatePool(targetUrl.origin);
162
208
  const startTime = process.hrtime.bigint();
163
- // --- NEW: Apply Throttling Simulation ---
164
209
  if (this.simulatedLatencyMs > 0) {
165
210
  await new Promise((resolve) => setTimeout(resolve, this.simulatedLatencyMs));
166
211
  }
167
- // ----------------------------------------
168
212
  const response = await pool.request({
169
213
  path: `${targetUrl.pathname}${targetUrl.search}`,
170
214
  method: method,
@@ -194,26 +238,38 @@ export class ApiEngine {
194
238
  timestamp: new Date().toLocaleTimeString(),
195
239
  };
196
240
  this.records.push(record);
241
+ // Pass the engine's default assertion mode into the response
197
242
  const apiResponse = new ApiResponse({
198
243
  statusCode: response.statusCode,
199
244
  headers: response.headers,
200
245
  body: parsedBody,
201
246
  latencyMs: formattedLatency,
202
- });
247
+ }, this.defaultAssertionMode);
203
248
  apiResponse.lastExecutionRecord = record;
204
249
  return apiResponse;
205
250
  }
251
+ // --- NEW: Evaluate All Soft Assertions at End of Suite ---
206
252
  /**
207
- * Continuous heartbeat loop. Clears internal records each run, executes the target test function,
208
- * generates HTML reports, and sleeps for the parsed interval.
253
+ * Throws a hard abort error if any tests failed during the execution cycle.
254
+ * Best used at the end of a soft-assertion test suite.
209
255
  */
256
+ assertAll() {
257
+ const failedRecords = this.records.filter((r) => !r.passed);
258
+ if (failedRecords.length > 0) {
259
+ const summary = failedRecords
260
+ .map((r) => `${r.method} ${r.endpoint} [${r.statusCode}] -> ${r.errorMsg || 'Failed status'}`)
261
+ .join('\n - ');
262
+ throw new Error(`\n❌ [Suite Aborted] ${failedRecords.length} soft assertion(s) failed during execution:\n - ${summary}`);
263
+ }
264
+ }
265
+ // ---------------------------------------------------------
210
266
  async startHeartbeat(testFn) {
211
267
  const cliInterval = parseCliInterval();
212
268
  const intervalMs = cliInterval?.ms ?? 60_000;
213
269
  console.log(`\n🚀 Continuous Monitoring Active (Interval: ${cliInterval?.raw ?? '1m'})`);
214
270
  while (true) {
215
271
  try {
216
- this.records = []; // Reset records for the new cycle
272
+ this.records = [];
217
273
  await testFn();
218
274
  }
219
275
  catch (err) {
@@ -228,9 +284,6 @@ export class ApiEngine {
228
284
  }
229
285
  }
230
286
  }
231
- /**
232
- * Persists current run to history file and returns all past execution history
233
- */
234
287
  updateAndGetHistory(currentSummary) {
235
288
  const historyFile = path.resolve(this.historyFilePath);
236
289
  let history = [];
@@ -243,7 +296,6 @@ export class ApiEngine {
243
296
  history = [];
244
297
  }
245
298
  }
246
- // Add current run and keep last 10 executions
247
299
  history.push(currentSummary);
248
300
  if (history.length > 10) {
249
301
  history = history.slice(-10);
@@ -303,7 +355,6 @@ export class ApiEngine {
303
355
  <head>
304
356
  <meta charset="UTF-8">
305
357
  <title>fast-api-tester Analytics & Execution Summary</title>
306
- <!-- CDN load Chart.js -->
307
358
  <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
308
359
  <style>
309
360
  *, *::before, *::after { box-sizing: border-box; }
@@ -1 +1 @@
1
- {"version":3,"file":"apiEngine.js","sourceRoot":"","sources":["../src/apiEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apiEngine.js","sourceRoot":"","sources":["../src/apiEngine.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fast-api-tester",
3
- "version": "1.0.11",
3
+ "version": "1.0.13",
4
4
  "description": "Ultra-fast, connection-pooled API testing library for Node.js",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
package/readme CHANGED
@@ -187,8 +187,78 @@ Every execution run updates `test-report.html` and persists historical execution
187
187
  - **Historical Execution Trend**: Stacked bar chart visualizing test pass/fail trends over time across consecutive heartbeats.
188
188
  - **Detailed Table View**: Complete summary including HTTP Method, Endpoint, Status Code, Measured Latency, SLA Target, and exact error stack/messages for failing requests.
189
189
 
190
+ ### 🐌 Bandwidth Throttling Simulator
191
+
192
+ Test your API's resilience and SLA assertions under real-world network conditions. The bandwidth simulator introduces precise artificial latency to mimic poor connections, ensuring your timeouts and SLA limits are truly battle-tested before hitting production.
193
+
194
+ **Available Profiles:**
195
+
196
+ - `Slow-3G`: 500ms delay
197
+ - `3G`: 300ms delay
198
+ - `4G`: 100ms delay
199
+ - `None`: 0ms delay (Default)
200
+ - Custom: Pass any raw `number` to simulate exact millisecond latency.
201
+
202
+ **Example Usage:**
203
+
204
+ ```typescript
205
+ import { ApiEngine } from './index';
206
+
207
+ // Initialize the engine with a 3G network profile (adds 300ms artificial delay)
208
+ const api = new ApiEngine()
209
+ .setBaseUrl('https://api.example.com')
210
+ .simulateNetwork('3G');
211
+
212
+ api.startHeartbeat(async () => {
213
+ const res = await api.get('/health');
214
+
215
+ // If the server takes 250ms to respond, total measured latency will be 550ms.
216
+ // This helps ensure your application handles degraded network states gracefully.
217
+ res.expectLatencyUnder(500);
218
+ });
219
+ ```
220
+
221
+ ### ⚖️ Assertion Modes (Hard vs. Soft)
222
+
223
+ The framework supports two distinct validation behaviors to give you maximum flexibility when testing APIs:
224
+
225
+ - **Hard Assertions (Default)**: Designed for strict control flows where subsequent steps depend entirely on the success of the current step. When a hard assertion fails (e.g., unexpected status code or SLA violation), it immediately records the failure, updates the test execution record, and throws a fatal `Error` that aborts the test suite execution instantly.
226
+ - **Soft Assertions**: Designed for comprehensive test reporting where you want to execute an entire suite or multiple checks without stopping at the first error. When a soft assertion fails, it logs a warning, flags the failure in the test record, and continues test execution. This ensures all endpoints are tested and included in the final HTML report and telemetry history, rather than failing fast.
227
+
228
+ #### How the Implementation Works
229
+
230
+ **1. Configuration & Mode State (`AssertionMode`)**
231
+
232
+ - **Global Level**: You can configure the engine-wide default behavior using `engine.setAssertionMode('soft')` or `'hard'`. Every request made through the engine inherits this baseline mode.
233
+ - **Inline Level**: You can override the mode on a per-response chain using `.soft()` or `.hard()` right before your assertions.
234
+
235
+ **2. Centralized Error Handling (`handleAssertionFailure`)**
236
+
237
+ Instead of directly throwing errors inside every expectation method, assertions pass their failure message to a centralized handler:
238
+
239
+ - It updates the `TestExecutionRecord` by setting `passed = false` and appends the error message.
240
+ - If the mode is `'hard'`, it throws an `Error` immediately.
241
+ - If the mode is `'soft'`, it catches/bypasses the throw, logs a warning message to the console (`console.warn`), and allows the script execution to proceed normally.
242
+
243
+ ```typescript
244
+ const engine = new ApiEngine()
245
+ .setBaseUrl('https://api.example.com')
246
+ .setAssertionMode('soft'); // Make all requests log failures but continue
247
+
248
+ await engine.startHeartbeat(async () => {
249
+ // Even if this fails (e.g., latency > 50ms), execution continues!
250
+ await engine.get('/users').then(res => res.expectStatusOk().expectLatencyUnder(50));
251
+
252
+ // This request STILL executes and gets recorded in the HTML report
253
+ await engine.get('/orders').then(res => res.expectStatus(200));
254
+
255
+ // Abort suite hard AT THE END if any soft assertions failed above
256
+ engine.assertAll();
257
+ });
258
+ ```
259
+
190
260
  ---
191
261
 
192
262
  ## 📜 License
193
263
 
194
- [MIT](./LICENSE) © Kushan Amarasiri
264
+ [MIT](./LICENSE) © Kushan Amarasiri