@@ -45,19 +45,36 @@ class MockFunctionContext {
45
45
this . #times = times ;
46
46
}
47
47
48
+ /**
49
+ * Gets an array of recorded calls made to the mock function.
50
+ * @returns {Array } An array of recorded calls.
51
+ */
48
52
get calls ( ) {
49
53
return ArrayPrototypeSlice ( this . #calls, 0 ) ;
50
54
}
51
55
56
+ /**
57
+ * Retrieves the number of times the mock function has been called.
58
+ * @returns {number } The call count.
59
+ */
52
60
callCount ( ) {
53
61
return this . #calls. length ;
54
62
}
55
63
64
+ /**
65
+ * Sets a new implementation for the mock function.
66
+ * @param {Function } implementation - The new implementation for the mock function.
67
+ */
56
68
mockImplementation ( implementation ) {
57
69
validateFunction ( implementation , 'implementation' ) ;
58
70
this . #implementation = implementation ;
59
71
}
60
72
73
+ /**
74
+ * Replaces the implementation of the function only once.
75
+ * @param {Function } implementation - The substitute function.
76
+ * @param {number } [onCall] - The call index to be replaced.
77
+ */
61
78
mockImplementationOnce ( implementation , onCall ) {
62
79
validateFunction ( implementation , 'implementation' ) ;
63
80
const nextCall = this . #calls. length ;
@@ -66,6 +83,9 @@ class MockFunctionContext {
66
83
this . #mocks. set ( call , implementation ) ;
67
84
}
68
85
86
+ /**
87
+ * Restores the original function that was mocked.
88
+ */
69
89
restore ( ) {
70
90
const { descriptor, object, original, methodName } = this . #restore;
71
91
@@ -79,14 +99,25 @@ class MockFunctionContext {
79
99
}
80
100
}
81
101
102
+ /**
103
+ * Resets the recorded calls to the mock function
104
+ */
82
105
resetCalls ( ) {
83
106
this . #calls = [ ] ;
84
107
}
85
108
109
+ /**
110
+ * Tracks a call made to the mock function.
111
+ * @param {object } call - The call details.
112
+ */
86
113
trackCall ( call ) {
87
114
ArrayPrototypePush ( this . #calls, call ) ;
88
115
}
89
116
117
+ /**
118
+ * Gets the next implementation to use for the mock function.
119
+ * @returns {Function } The next implementation.
120
+ */
90
121
nextImpl ( ) {
91
122
const nextCall = this . #calls. length ;
92
123
const mock = this . #mocks. get ( nextCall ) ;
@@ -109,11 +140,24 @@ class MockTracker {
109
140
#mocks = [ ] ;
110
141
#timers;
111
142
143
+ /**
144
+ * .
145
+ * Returns the mock timers of this MockTracker instance.
146
+ * @returns {MockTimers } The mock timers instance.
147
+ */
112
148
get timers ( ) {
113
149
this . #timers ??= new MockTimers ( ) ;
114
150
return this . #timers;
115
151
}
116
152
153
+ /**
154
+ * Creates a mock function tracker.
155
+ * @param {Function } [original] - The original function to be tracked.
156
+ * @param {Function } [implementation] - An optional replacement function for the original one.
157
+ * @param {object } [options] - Additional tracking options.
158
+ * @param {number } [options.times=Infinity] - The maximum number of times the mock function can be called.
159
+ * @returns {ProxyConstructor } The mock function tracker.
160
+ */
117
161
fn (
118
162
original = function ( ) { } ,
119
163
implementation = original ,
@@ -137,6 +181,17 @@ class MockTracker {
137
181
return this . #setupMock( ctx , original ) ;
138
182
}
139
183
184
+ /**
185
+ * Creates a method tracker for a specified object or function.
186
+ * @param {(object | Function) } objectOrFunction - The object or function containing the method to be tracked.
187
+ * @param {string } methodName - The name of the method to be tracked.
188
+ * @param {Function } [implementation] - An optional replacement function for the original method.
189
+ * @param {object } [options] - Additional tracking options.
190
+ * @param {boolean } [options.getter=false] - Indicates whether this is a getter method.
191
+ * @param {boolean } [options.setter=false] - Indicates whether this is a setter method.
192
+ * @param {number } [options.times=Infinity] - The maximum number of times the mock method can be called.
193
+ * @returns {ProxyConstructor } The mock method tracker.
194
+ */
140
195
method (
141
196
objectOrFunction ,
142
197
methodName ,
@@ -216,6 +271,18 @@ class MockTracker {
216
271
return mock ;
217
272
}
218
273
274
+ /**
275
+ * Mocks a getter method of an object.
276
+ * This is a syntax sugar for the MockTracker.method with options.getter set to true
277
+ * @param {object } object - The target object.
278
+ * @param {string } methodName - The name of the getter method to be mocked.
279
+ * @param {Function } [implementation] - An optional replacement function for the targeted method.
280
+ * @param {object } [options] - Additional tracking options.
281
+ * @param {boolean } [options.getter=true] - Indicates whether this is a getter method.
282
+ * @param {boolean } [options.setter=false] - Indicates whether this is a setter method.
283
+ * @param {number } [options.times=Infinity] - The maximum number of times the mock method can be called.
284
+ * @returns {ProxyConstructor } The mock method tracker.
285
+ */
219
286
getter (
220
287
object ,
221
288
methodName ,
@@ -244,6 +311,18 @@ class MockTracker {
244
311
} ) ;
245
312
}
246
313
314
+ /**
315
+ * Mocks a setter method of an object.
316
+ * This function is a syntax sugar for MockTracker.method with options.setter set to true.
317
+ * @param {object } object - The target object.
318
+ * @param {string } methodName - The setter method to be mocked.
319
+ * @param {Function } [implementation] - An optional replacement function for the targeted method.
320
+ * @param {object } [options] - Additional tracking options.
321
+ * @param {boolean } [options.getter=false] - Indicates whether this is a getter method.
322
+ * @param {boolean } [options.setter=true] - Indicates whether this is a setter method.
323
+ * @param {number } [options.times=Infinity] - The maximum number of times the mock method can be called.
324
+ * @returns {ProxyConstructor } The mock method tracker.
325
+ */
247
326
setter (
248
327
object ,
249
328
methodName ,
@@ -272,12 +351,18 @@ class MockTracker {
272
351
} ) ;
273
352
}
274
353
354
+ /**
355
+ * Resets the mock tracker, restoring all mocks and clearing timers.
356
+ */
275
357
reset ( ) {
276
358
this . restoreAll ( ) ;
277
359
this . #timers?. reset ( ) ;
278
360
this . #mocks = [ ] ;
279
361
}
280
362
363
+ /**
364
+ * Restore all mocks created by this MockTracker instance.
365
+ */
281
366
restoreAll ( ) {
282
367
for ( let i = 0 ; i < this . #mocks. length ; i ++ ) {
283
368
FunctionPrototypeCall ( restore , this . #mocks[ i ] ) ;
0 commit comments