@justscale/testing 0.1.0
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.
- package/LICENSE +21 -0
- package/README.md +44 -0
- package/dist/app.d.ts +69 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +105 -0
- package/dist/app.js.map +1 -0
- package/dist/client.d.ts +190 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +122 -0
- package/dist/client.js.map +1 -0
- package/dist/conformance/cluster-primitives.d.ts +75 -0
- package/dist/conformance/cluster-primitives.d.ts.map +1 -0
- package/dist/conformance/cluster-primitives.js +50 -0
- package/dist/conformance/cluster-primitives.js.map +1 -0
- package/dist/container.d.ts +70 -0
- package/dist/container.d.ts.map +1 -0
- package/dist/container.js +95 -0
- package/dist/container.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/kit.d.ts +82 -0
- package/dist/kit.d.ts.map +1 -0
- package/dist/kit.js +114 -0
- package/dist/kit.js.map +1 -0
- package/dist/mock.d.ts +137 -0
- package/dist/mock.d.ts.map +1 -0
- package/dist/mock.js +464 -0
- package/dist/mock.js.map +1 -0
- package/package.json +48 -0
package/dist/mock.js
ADDED
|
@@ -0,0 +1,464 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mocking utilities for JustScale testing
|
|
3
|
+
*
|
|
4
|
+
* Integrates with Node.js test runner's mock API while providing
|
|
5
|
+
* type-safe helpers for mocking services and controllers.
|
|
6
|
+
*
|
|
7
|
+
* Supports `using` keyword for automatic cleanup:
|
|
8
|
+
* ```typescript
|
|
9
|
+
* using spied = spyOn(service);
|
|
10
|
+
* // ... test code ...
|
|
11
|
+
* // automatically restored when block exits
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
import { mock } from 'node:test';
|
|
15
|
+
import { inspect } from 'node:util';
|
|
16
|
+
import * as inspector from 'node:inspector';
|
|
17
|
+
// Re-export node:test mock for convenience
|
|
18
|
+
export { mock };
|
|
19
|
+
// ============================================================================
|
|
20
|
+
// CDP Custom Formatters (for V8-based debuggers)
|
|
21
|
+
// ============================================================================
|
|
22
|
+
/** Symbol to mark JustScale mock functions */
|
|
23
|
+
const MOCK_MARKER = Symbol('justscale.mock');
|
|
24
|
+
/** Read the mock marker metadata from an object. */
|
|
25
|
+
function getMockMarker(obj) {
|
|
26
|
+
return obj?.[MOCK_MARKER];
|
|
27
|
+
}
|
|
28
|
+
/** Set the mock marker metadata on an object. */
|
|
29
|
+
function setMockMarker(obj, meta) {
|
|
30
|
+
obj[MOCK_MARKER] = meta;
|
|
31
|
+
}
|
|
32
|
+
/** Debug logging for formatter development */
|
|
33
|
+
const FORMATTER_DEBUG = process.env.JUSTSCALE_FORMATTER_DEBUG === '1';
|
|
34
|
+
function formatterLog(...args) {
|
|
35
|
+
if (FORMATTER_DEBUG) {
|
|
36
|
+
console.log('[JustScale Mock Formatter]', ...args);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Enable custom object formatters via CDP and register our formatter.
|
|
41
|
+
* This works when a debugger is attached that uses Chrome DevTools Protocol.
|
|
42
|
+
*/
|
|
43
|
+
function enableCustomFormatters() {
|
|
44
|
+
// Only run once
|
|
45
|
+
if (globalThis.__justscaleMockFormattersEnabled)
|
|
46
|
+
return;
|
|
47
|
+
globalThis.__justscaleMockFormattersEnabled = true;
|
|
48
|
+
formatterLog('Initializing custom formatters...');
|
|
49
|
+
try {
|
|
50
|
+
// Try to enable via CDP when inspector is active
|
|
51
|
+
const url = inspector.url();
|
|
52
|
+
formatterLog('Inspector URL:', url);
|
|
53
|
+
if (url) {
|
|
54
|
+
const session = new inspector.Session();
|
|
55
|
+
session.connect();
|
|
56
|
+
formatterLog('CDP session connected');
|
|
57
|
+
// Must enable Runtime first before setting custom formatters
|
|
58
|
+
session.post('Runtime.enable', {}, (enableErr) => {
|
|
59
|
+
if (enableErr) {
|
|
60
|
+
formatterLog('Runtime.enable ERROR:', enableErr);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
formatterLog('Runtime.enable SUCCESS');
|
|
64
|
+
session.post('Runtime.setCustomObjectFormatterEnabled', { enabled: true }, (err) => {
|
|
65
|
+
if (err) {
|
|
66
|
+
formatterLog('setCustomObjectFormatterEnabled ERROR:', err);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
formatterLog('setCustomObjectFormatterEnabled SUCCESS');
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
// Don't disconnect - keep formatter enabled
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
formatterLog('No inspector URL - debugger not attached yet');
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch (e) {
|
|
80
|
+
formatterLog('Inspector setup failed:', e);
|
|
81
|
+
}
|
|
82
|
+
// Register devtoolsFormatters
|
|
83
|
+
if (typeof globalThis !== 'undefined') {
|
|
84
|
+
const formatters = (globalThis.devtoolsFormatters ??= []);
|
|
85
|
+
// Check if already registered
|
|
86
|
+
if (formatters.some((f) => f.__justscaleMock)) {
|
|
87
|
+
formatterLog('Formatter already registered');
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
formatterLog('Registering devtoolsFormatters...');
|
|
91
|
+
formatters.push({
|
|
92
|
+
__justscaleMock: true,
|
|
93
|
+
header(obj) {
|
|
94
|
+
formatterLog('header() called with:', typeof obj, obj?.constructor?.name);
|
|
95
|
+
const meta = getMockMarker(obj);
|
|
96
|
+
if (!meta) {
|
|
97
|
+
formatterLog('header() - no MOCK_MARKER, returning null');
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
const fn = obj;
|
|
101
|
+
const calls = fn.mock?.callCount?.() ?? 0;
|
|
102
|
+
const name = meta.name || 'MockFn';
|
|
103
|
+
formatterLog('header() - returning formatted header for:', name, 'calls:', calls);
|
|
104
|
+
return [
|
|
105
|
+
'span',
|
|
106
|
+
{ style: 'color: #9c27b0; font-weight: bold;' },
|
|
107
|
+
`[MockFn] ${name} calls=${calls}`,
|
|
108
|
+
];
|
|
109
|
+
},
|
|
110
|
+
hasBody(obj) {
|
|
111
|
+
const has = !!getMockMarker(obj);
|
|
112
|
+
formatterLog('hasBody() called, result:', has);
|
|
113
|
+
return has;
|
|
114
|
+
},
|
|
115
|
+
body(obj) {
|
|
116
|
+
formatterLog('body() called');
|
|
117
|
+
const meta = getMockMarker(obj);
|
|
118
|
+
const fn = obj;
|
|
119
|
+
const calls = fn.mock?.calls ?? [];
|
|
120
|
+
const children = [
|
|
121
|
+
['div', {}, `Name: ${meta?.name || '(anonymous)'}`],
|
|
122
|
+
['div', {}, `Call count: ${fn.mock?.callCount?.() ?? 0}`],
|
|
123
|
+
];
|
|
124
|
+
if (calls.length > 0) {
|
|
125
|
+
children.push(['div', { style: 'margin-top: 4px;' }, 'Recent calls:']);
|
|
126
|
+
for (let i = Math.max(0, calls.length - 5); i < calls.length; i++) {
|
|
127
|
+
const call = calls[i];
|
|
128
|
+
children.push([
|
|
129
|
+
'div',
|
|
130
|
+
{ style: 'margin-left: 8px; font-family: monospace;' },
|
|
131
|
+
`[${i}] `,
|
|
132
|
+
['object', { object: call.arguments }],
|
|
133
|
+
]);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return ['div', { style: 'padding: 4px;' }, ...children];
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
formatterLog('devtoolsFormatters registered, total formatters:', formatters.length);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Manually enable custom formatters after debugger connects.
|
|
144
|
+
* This is opt-in — it is not called automatically on import.
|
|
145
|
+
* Call it early in your test setup if you want CDP-based formatting in the debugger.
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* ```typescript
|
|
149
|
+
* import { enableDebuggerFormatters } from '@justscale/testing';
|
|
150
|
+
* enableDebuggerFormatters(); // Call early in your test
|
|
151
|
+
* ```
|
|
152
|
+
*/
|
|
153
|
+
export function enableDebuggerFormatters() {
|
|
154
|
+
enableCustomFormatters();
|
|
155
|
+
}
|
|
156
|
+
// ============================================================================
|
|
157
|
+
// Node.js util.inspect.custom Support (for console.log)
|
|
158
|
+
// ============================================================================
|
|
159
|
+
/**
|
|
160
|
+
* Add custom inspect symbols to a mock function for better debugging.
|
|
161
|
+
* When logged or inspected, shows: [MockFn name? calls=N lastArgs=... returned=...]
|
|
162
|
+
*/
|
|
163
|
+
function addMockInspect(fn, name) {
|
|
164
|
+
// Mark as a JustScale mock for CDP formatters
|
|
165
|
+
setMockMarker(fn, { name });
|
|
166
|
+
// Store the name for later access (used by Symbol.toStringTag getter)
|
|
167
|
+
fn.__mockName = name;
|
|
168
|
+
// Add a $mock property with a getter that shows current state in debugger
|
|
169
|
+
// This appears when you expand the mock in JetBrains Variables panel
|
|
170
|
+
Object.defineProperty(fn, '$mock', {
|
|
171
|
+
get() {
|
|
172
|
+
const calls = this.mock.callCount();
|
|
173
|
+
const lastCall = this.mock.calls.at(-1);
|
|
174
|
+
return {
|
|
175
|
+
name: name || '(anonymous)',
|
|
176
|
+
calls,
|
|
177
|
+
lastArgs: lastCall?.arguments,
|
|
178
|
+
lastResult: lastCall?.result,
|
|
179
|
+
lastError: lastCall?.error?.message,
|
|
180
|
+
};
|
|
181
|
+
},
|
|
182
|
+
enumerable: true, // Make it visible in debugger
|
|
183
|
+
});
|
|
184
|
+
// Node.js util.inspect.custom for console.log
|
|
185
|
+
fn[inspect.custom] = function (depth, options, inspectFn) {
|
|
186
|
+
const calls = this.mock.callCount();
|
|
187
|
+
const lastCall = this.mock.calls.at(-1);
|
|
188
|
+
const parts = [options.stylize('MockFn', 'special')];
|
|
189
|
+
if (name) {
|
|
190
|
+
parts.push(options.stylize(name, 'string'));
|
|
191
|
+
}
|
|
192
|
+
parts.push('calls=' + options.stylize(String(calls), 'number'));
|
|
193
|
+
if (lastCall) {
|
|
194
|
+
const argStr = inspectFn(lastCall.arguments, { ...options, depth: 1, colors: false });
|
|
195
|
+
parts.push('lastArgs=' + argStr);
|
|
196
|
+
if (lastCall.result !== undefined) {
|
|
197
|
+
const resultStr = inspectFn(lastCall.result, { ...options, depth: 1, colors: false });
|
|
198
|
+
parts.push('returned=' + resultStr);
|
|
199
|
+
}
|
|
200
|
+
if (lastCall.error) {
|
|
201
|
+
parts.push(options.stylize('threw=' + lastCall.error.message, 'undefined'));
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return '[' + parts.join(' ') + ']';
|
|
205
|
+
};
|
|
206
|
+
// Dynamic Symbol.toStringTag for JetBrains debugger display
|
|
207
|
+
// Shows: MockFn(name) calls=N
|
|
208
|
+
Object.defineProperty(fn, Symbol.toStringTag, {
|
|
209
|
+
get() {
|
|
210
|
+
const mockName = this.__mockName;
|
|
211
|
+
const calls = this.mock?.callCount?.() ?? 0;
|
|
212
|
+
return mockName ? `MockFn(${mockName}) calls=${calls}` : `MockFn calls=${calls}`;
|
|
213
|
+
},
|
|
214
|
+
});
|
|
215
|
+
return fn;
|
|
216
|
+
}
|
|
217
|
+
// ============================================================================
|
|
218
|
+
// Service Mocking
|
|
219
|
+
// ============================================================================
|
|
220
|
+
/**
|
|
221
|
+
* Create a mock implementation of a service.
|
|
222
|
+
* Uses node:test mock functions for tracking calls and assertions.
|
|
223
|
+
*
|
|
224
|
+
* @example
|
|
225
|
+
* ```typescript
|
|
226
|
+
* const mockRepo = mockService<typeof PlayerRepository>({
|
|
227
|
+
* get: mock.fn(() => Promise.resolve({ id: '1', name: 'Mock' })),
|
|
228
|
+
* find: mock.fn(() => Promise.resolve([])),
|
|
229
|
+
* });
|
|
230
|
+
* ```
|
|
231
|
+
*/
|
|
232
|
+
export function mockService(impl, name) {
|
|
233
|
+
const serviceName = name || 'MockedService';
|
|
234
|
+
const proxy = new Proxy(impl, {
|
|
235
|
+
get(target, prop) {
|
|
236
|
+
// Handle inspect symbols
|
|
237
|
+
if (prop === inspect.custom) {
|
|
238
|
+
return function (depth, options) {
|
|
239
|
+
const methods = Object.entries(target)
|
|
240
|
+
.filter(([, v]) => typeof v === 'function' && v.mock)
|
|
241
|
+
.map(([k, v]) => `${k}(${v.mock.callCount()})`)
|
|
242
|
+
.join(', ');
|
|
243
|
+
return options.stylize('[MockedService', 'special') +
|
|
244
|
+
` ${options.stylize(serviceName, 'string')}` +
|
|
245
|
+
` { ${methods} }` +
|
|
246
|
+
options.stylize(']', 'special');
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
if (prop === Symbol.toStringTag) {
|
|
250
|
+
return 'MockedService';
|
|
251
|
+
}
|
|
252
|
+
if (prop in target) {
|
|
253
|
+
return target[prop];
|
|
254
|
+
}
|
|
255
|
+
throw new Error(`Method "${String(prop)}" was not mocked`);
|
|
256
|
+
},
|
|
257
|
+
});
|
|
258
|
+
return proxy;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Create a spy wrapper around an existing service instance.
|
|
262
|
+
* All method calls are tracked while still calling the real implementation.
|
|
263
|
+
*
|
|
264
|
+
* Supports `using` for automatic cleanup:
|
|
265
|
+
* ```typescript
|
|
266
|
+
* using spy = spyOn(playerRepo);
|
|
267
|
+
* await spy.spied.get(Player.ref('123'));
|
|
268
|
+
* assertCallCount(spy.spied.get, 1);
|
|
269
|
+
* // Original methods restored when block exits
|
|
270
|
+
* ```
|
|
271
|
+
*
|
|
272
|
+
* @example Manual cleanup
|
|
273
|
+
* ```typescript
|
|
274
|
+
* const spy = spyOn(playerRepo);
|
|
275
|
+
* try {
|
|
276
|
+
* await spy.spied.get(Player.ref('123'));
|
|
277
|
+
* assertCallCount(spy.spied.get, 1);
|
|
278
|
+
* } finally {
|
|
279
|
+
* spy.restore();
|
|
280
|
+
* }
|
|
281
|
+
* ```
|
|
282
|
+
*/
|
|
283
|
+
export function spyOn(instance) {
|
|
284
|
+
const originalMethods = new Map();
|
|
285
|
+
const spied = {};
|
|
286
|
+
const instanceName = instance.constructor?.name || 'Object';
|
|
287
|
+
// Spy on own properties
|
|
288
|
+
for (const key of Object.keys(instance)) {
|
|
289
|
+
const value = instance[key];
|
|
290
|
+
if (typeof value === 'function') {
|
|
291
|
+
originalMethods.set(key, value);
|
|
292
|
+
const fn = addMockInspect(mock.fn(value.bind(instance)), `${instanceName}.${String(key)}`);
|
|
293
|
+
spied[key] = fn;
|
|
294
|
+
// Also replace on original for in-place spying
|
|
295
|
+
instance[key] = fn;
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
spied[key] = value;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
// Spy on prototype methods
|
|
302
|
+
const proto = Object.getPrototypeOf(instance);
|
|
303
|
+
if (proto && proto !== Object.prototype) {
|
|
304
|
+
for (const key of Object.getOwnPropertyNames(proto)) {
|
|
305
|
+
if (key === 'constructor')
|
|
306
|
+
continue;
|
|
307
|
+
const descriptor = Object.getOwnPropertyDescriptor(proto, key);
|
|
308
|
+
if (descriptor && typeof descriptor.value === 'function' && !(key in spied)) {
|
|
309
|
+
originalMethods.set(key, descriptor.value);
|
|
310
|
+
const fn = addMockInspect(mock.fn(descriptor.value.bind(instance)), `${instanceName}.${key}`);
|
|
311
|
+
spied[key] = fn;
|
|
312
|
+
instance[key] = fn;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
const restore = () => {
|
|
317
|
+
for (const [key, original] of originalMethods) {
|
|
318
|
+
instance[key] = original;
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
const reset = () => {
|
|
322
|
+
for (const value of Object.values(spied)) {
|
|
323
|
+
if (typeof value === 'function' && value.mock) {
|
|
324
|
+
value.mock.resetCalls();
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
};
|
|
328
|
+
const wrapper = {
|
|
329
|
+
spied: spied,
|
|
330
|
+
original: instance,
|
|
331
|
+
reset,
|
|
332
|
+
restore,
|
|
333
|
+
[Symbol.dispose]: restore,
|
|
334
|
+
};
|
|
335
|
+
// Add custom inspect for the wrapper itself
|
|
336
|
+
wrapper[inspect.custom] = function (depth, options, _inspectFn) {
|
|
337
|
+
const methods = Object.entries(spied)
|
|
338
|
+
.filter(([, v]) => typeof v === 'function' && v.mock)
|
|
339
|
+
.map(([k, v]) => `${k}(${v.mock.callCount()})`)
|
|
340
|
+
.join(', ');
|
|
341
|
+
return options.stylize('[SpyWrapper', 'special') +
|
|
342
|
+
` ${options.stylize(instanceName, 'string')}` +
|
|
343
|
+
` { ${methods} }` +
|
|
344
|
+
options.stylize(']', 'special');
|
|
345
|
+
};
|
|
346
|
+
Object.defineProperty(wrapper, Symbol.toStringTag, { value: 'SpyWrapper' });
|
|
347
|
+
return wrapper;
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Create a spy that wraps an existing service instance.
|
|
351
|
+
* Returns just the spied object (simpler API, no auto-cleanup).
|
|
352
|
+
*
|
|
353
|
+
* @example
|
|
354
|
+
* ```typescript
|
|
355
|
+
* const spiedRepo = spyService(playerRepo);
|
|
356
|
+
* await spiedRepo.get(Player.ref('123'));
|
|
357
|
+
* assertCallCount(spiedRepo.get, 1);
|
|
358
|
+
* ```
|
|
359
|
+
*/
|
|
360
|
+
export function spyService(instance) {
|
|
361
|
+
const spied = {};
|
|
362
|
+
const instanceName = instance.constructor?.name || 'Object';
|
|
363
|
+
for (const key of Object.keys(instance)) {
|
|
364
|
+
const value = instance[key];
|
|
365
|
+
if (typeof value === 'function') {
|
|
366
|
+
spied[key] = addMockInspect(mock.fn(value.bind(instance)), `${instanceName}.${String(key)}`);
|
|
367
|
+
}
|
|
368
|
+
else {
|
|
369
|
+
spied[key] = value;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
const proto = Object.getPrototypeOf(instance);
|
|
373
|
+
if (proto && proto !== Object.prototype) {
|
|
374
|
+
for (const key of Object.getOwnPropertyNames(proto)) {
|
|
375
|
+
if (key === 'constructor')
|
|
376
|
+
continue;
|
|
377
|
+
const descriptor = Object.getOwnPropertyDescriptor(proto, key);
|
|
378
|
+
if (descriptor && typeof descriptor.value === 'function' && !(key in spied)) {
|
|
379
|
+
spied[key] = addMockInspect(mock.fn(descriptor.value.bind(instance)), `${instanceName}.${key}`);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
// Add custom inspect for the spied service object
|
|
384
|
+
spied[inspect.custom] = function (depth, options) {
|
|
385
|
+
const methods = Object.entries(this)
|
|
386
|
+
.filter(([, v]) => typeof v === 'function' && v.mock)
|
|
387
|
+
.map(([k, v]) => `${k}(${v.mock.callCount()})`)
|
|
388
|
+
.join(', ');
|
|
389
|
+
return options.stylize('[SpiedService', 'special') +
|
|
390
|
+
` ${options.stylize(instanceName, 'string')}` +
|
|
391
|
+
` { ${methods} }` +
|
|
392
|
+
options.stylize(']', 'special');
|
|
393
|
+
};
|
|
394
|
+
Object.defineProperty(spied, Symbol.toStringTag, { value: 'SpiedService' });
|
|
395
|
+
return spied;
|
|
396
|
+
}
|
|
397
|
+
// ============================================================================
|
|
398
|
+
// Mock Function Helpers
|
|
399
|
+
// ============================================================================
|
|
400
|
+
/**
|
|
401
|
+
* Create a mock function with a specific implementation.
|
|
402
|
+
* @param implementation Optional function to call when the mock is invoked
|
|
403
|
+
* @param name Optional name for debugging (shown in console.log)
|
|
404
|
+
*/
|
|
405
|
+
export function mockFn(implementation, name) {
|
|
406
|
+
return addMockInspect(mock.fn(implementation), name);
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Create a mock function that returns a resolved promise.
|
|
410
|
+
* @param value The value to resolve with
|
|
411
|
+
* @param name Optional name for debugging (shown in console.log)
|
|
412
|
+
*/
|
|
413
|
+
export function mockResolves(value, name) {
|
|
414
|
+
return addMockInspect(mock.fn(() => Promise.resolve(value)), name ?? 'resolves');
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* Create a mock function that returns a rejected promise.
|
|
418
|
+
* @param error The error to reject with
|
|
419
|
+
* @param name Optional name for debugging (shown in console.log)
|
|
420
|
+
*/
|
|
421
|
+
export function mockRejects(error, name) {
|
|
422
|
+
return addMockInspect(mock.fn(() => Promise.reject(error)), name ?? 'rejects');
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Create a mock function that throws an error.
|
|
426
|
+
* @param error The error to throw
|
|
427
|
+
* @param name Optional name for debugging (shown in console.log)
|
|
428
|
+
*/
|
|
429
|
+
export function mockThrows(error, name) {
|
|
430
|
+
return addMockInspect(mock.fn(() => {
|
|
431
|
+
throw error;
|
|
432
|
+
}), name ?? 'throws');
|
|
433
|
+
}
|
|
434
|
+
// ============================================================================
|
|
435
|
+
// Assertion Helpers
|
|
436
|
+
// ============================================================================
|
|
437
|
+
/**
|
|
438
|
+
* Assert that a mock was called with specific arguments.
|
|
439
|
+
*/
|
|
440
|
+
export function assertCalledWith(mockFn, ...expectedArgs) {
|
|
441
|
+
const calls = mockFn.mock.calls;
|
|
442
|
+
const found = calls.some((call) => JSON.stringify(call.arguments) === JSON.stringify(expectedArgs));
|
|
443
|
+
if (!found) {
|
|
444
|
+
const actualCalls = calls.map((c) => JSON.stringify(c.arguments)).join('\n ');
|
|
445
|
+
throw new Error(`Expected mock to be called with ${JSON.stringify(expectedArgs)}\n` +
|
|
446
|
+
`Actual calls:\n ${actualCalls || '(none)'}`);
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Assert that a mock was called exactly n times.
|
|
451
|
+
*/
|
|
452
|
+
export function assertCallCount(mockFn, expected) {
|
|
453
|
+
const actual = mockFn.mock.callCount();
|
|
454
|
+
if (actual !== expected) {
|
|
455
|
+
throw new Error(`Expected mock to be called ${expected} times, but was called ${actual} times`);
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* Assert that a mock was never called.
|
|
460
|
+
*/
|
|
461
|
+
export function assertNotCalled(mockFn) {
|
|
462
|
+
assertCallCount(mockFn, 0);
|
|
463
|
+
}
|
|
464
|
+
//# sourceMappingURL=mock.js.map
|
package/dist/mock.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock.js","sourceRoot":"","sources":["../src/mock.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@justscale/testing",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"sideEffects": false,
|
|
5
|
+
"description": "Test utilities, mocks, and test containers for JustScale",
|
|
6
|
+
"author": "JustScale",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/justscale/justscale.git",
|
|
11
|
+
"directory": "packages/core/testing"
|
|
12
|
+
},
|
|
13
|
+
"homepage": "https://justscale.sh",
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/justscale/justscale/issues"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"justscale",
|
|
19
|
+
"testing",
|
|
20
|
+
"mocks",
|
|
21
|
+
"test-container",
|
|
22
|
+
"typescript"
|
|
23
|
+
],
|
|
24
|
+
"type": "module",
|
|
25
|
+
"publishConfig": {
|
|
26
|
+
"access": "public"
|
|
27
|
+
},
|
|
28
|
+
"exports": {
|
|
29
|
+
".": {
|
|
30
|
+
"source": "./src/index.ts",
|
|
31
|
+
"types": "./dist/index.d.ts",
|
|
32
|
+
"import": "./dist/index.js",
|
|
33
|
+
"default": "./dist/index.js"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"files": [
|
|
37
|
+
"dist"
|
|
38
|
+
],
|
|
39
|
+
"peerDependencies": {
|
|
40
|
+
"@justscale/core": "0.1.0"
|
|
41
|
+
},
|
|
42
|
+
"scripts": {
|
|
43
|
+
"build": "ptsc -b tsconfig.build.json",
|
|
44
|
+
"clean": "rm -rf dist",
|
|
45
|
+
"typecheck": "ptsc --noEmit",
|
|
46
|
+
"test": "tsx --test --test-timeout=10000 --test-force-exit 'test/**/*.test.ts'"
|
|
47
|
+
}
|
|
48
|
+
}
|