Skip to content

Commit 4aaaff4

Browse files
mika-fischerUlisesGascon
authored andcommitted
test_runner: test return value of mocked promisified timers
PR-URL: #50331 Reviewed-By: Moshe Atlow <[email protected]> Reviewed-By: Chemi Atlow <[email protected]> Reviewed-By: Erick Wendel <[email protected]> Reviewed-By: Benjamin Gruenbaum <[email protected]>
1 parent cfd50f2 commit 4aaaff4

File tree

2 files changed

+35
-17
lines changed

2 files changed

+35
-17
lines changed

‎lib/internal/test_runner/mock/mock_timers.js‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ class MockTimers{
370370
returnMockDate;
371371
}
372372

373-
async* #setIntervalPromisified(interval,startTime,options){
373+
async* #setIntervalPromisified(interval,result,options){
374374
constcontext=this;
375375
constemitter=newEventEmitter();
376376
if(options?.signal){
@@ -394,8 +394,7 @@ class MockTimers{
394394

395395
consteventIt=EventEmitter.on(emitter,'data');
396396
constcallback=()=>{
397-
startTime+=interval;
398-
emitter.emit('data',startTime);
397+
emitter.emit('data',result);
399398
};
400399

401400
consttimerId=this.#createTimer(true,callback,interval,options);

‎test/parallel/test-runner-mock-timers.js‎

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,16 @@ describe('Mock Timers Test Suite', () =>{
407407
assert.strictEqual(result,expectedResult);
408408
});
409409

410+
it('should always return the same result as the original timers/promises/setTimeout',async(t)=>{
411+
t.mock.timers.enable({apis: ['setTimeout']});
412+
for(constexpectedResultof[undefined,null,false,true,0,0n,1,1n,'','result',{}]){
413+
constp=nodeTimersPromises.setTimeout(2000,expectedResult);
414+
t.mock.timers.tick(2000);
415+
constresult=awaitp;
416+
assert.strictEqual(result,expectedResult);
417+
}
418+
});
419+
410420
it('should abort operation if timers/promises/setTimeout received an aborted signal',async(t)=>{
411421
t.mock.timers.enable({apis: ['setTimeout']});
412422
constexpectedResult='result';
@@ -505,10 +515,11 @@ describe('Mock Timers Test Suite', () =>{
505515

506516
constexpectedIterations=5;
507517
constinterval=1000;
508-
conststartedAt=Date.now();
518+
lettime=0;
509519
asyncfunctionrun(){
510520
consttimes=[];
511-
forawait(consttimeofnodeTimersPromises.setInterval(interval,startedAt)){
521+
forawait(const_ofnodeTimersPromises.setInterval(interval)){// eslint-disable-line no-unused-vars
522+
time+=interval;
512523
times.push(time);
513524
if(times.length===expectedIterations)break;
514525
}
@@ -525,7 +536,20 @@ describe('Mock Timers Test Suite', () =>{
525536
consttimeResults=awaitr;
526537
assert.strictEqual(timeResults.length,expectedIterations);
527538
for(letit=1;it<expectedIterations;it++){
528-
assert.strictEqual(timeResults[it-1],startedAt+(interval*it));
539+
assert.strictEqual(timeResults[it-1],interval*it);
540+
}
541+
});
542+
543+
it('should always return the same result as the original timers/promises/setInterval',async(t)=>{
544+
t.mock.timers.enable({apis: ['setInterval']});
545+
for(constexpectedResultof[undefined,null,false,true,0,0n,1,1n,'','result',{}]){
546+
constintervalIterator=nodeTimersPromises.setInterval(2000,expectedResult);
547+
constp=intervalIterator.next();
548+
t.mock.timers.tick(2000);
549+
constresult=awaitp;
550+
awaitintervalIterator.return();
551+
assert.strictEqual(result.done,false);
552+
assert.strictEqual(result.value,expectedResult);
529553
}
530554
});
531555

@@ -579,13 +603,12 @@ describe('Mock Timers Test Suite', () =>{
579603
constsignal=controller.signal;
580604
constinterval=200;
581605
constexpectedIterations=2;
582-
conststartedAt=Date.now();
583-
consttimeResults=[];
606+
letnumIterations=0;
584607
asyncfunctionrun(){
585-
constit=nodeTimersPromises.setInterval(interval,startedAt,{ signal });
586-
forawait(consttimeofit){
587-
timeResults.push(time);
588-
if(timeResults.length===5)break;
608+
constit=nodeTimersPromises.setInterval(interval,undefined,{ signal });
609+
forawait(const_ofit){// eslint-disable-line no-unused-vars
610+
numIterations+=1;
611+
if(numIterations===5)break;
589612
}
590613
}
591614

@@ -601,11 +624,7 @@ describe('Mock Timers Test Suite', () =>{
601624
awaitassert.rejects(()=>r,{
602625
name: 'AbortError',
603626
});
604-
assert.strictEqual(timeResults.length,expectedIterations);
605-
606-
for(letit=1;it<expectedIterations;it++){
607-
assert.strictEqual(timeResults[it-1],startedAt+(interval*it));
608-
}
627+
assert.strictEqual(numIterations,expectedIterations);
609628
});
610629
});
611630
});

0 commit comments

Comments
(0)