@@ -396,23 +396,28 @@ describe('Change Streams', function () {
396
396
}
397
397
} ) ;
398
398
399
- it ( 'hasNext() does not cache the resume token' , {
400
- metadata : { requires : { topology : 'replicaset' } } ,
401
- async test ( ) {
402
- await initIteratorMode ( changeStream ) ;
403
- const resumeToken = changeStream . resumeToken ;
399
+ describe ( '#hasNext' , ( ) => {
400
+ it ( 'does not cache the resume token' , {
401
+ metadata : { requires : { topology : 'replicaset' } } ,
402
+ async test ( ) {
403
+ await initIteratorMode ( changeStream ) ;
404
+ const resumeToken = changeStream . resumeToken ;
404
405
405
- await collection . insertOne ( { a : 1 } ) ;
406
+ await collection . insertOne ( { a : 1 } ) ;
406
407
407
- const hasNext = await changeStream . hasNext ( ) ;
408
- expect ( hasNext ) . to . be . true ;
408
+ const hasNext = await changeStream . hasNext ( ) ;
409
+ expect ( hasNext ) . to . be . true ;
409
410
410
- expect ( changeStream . resumeToken ) . to . equal ( resumeToken ) ;
411
+ // Calling .hasNext() does not allow the ChangeStream to update the token,
412
+ // even when changes are present.
413
+ expect ( changeStream . resumeToken ) . to . equal ( resumeToken ) ;
411
414
412
- const change = await changeStream . next ( ) ;
413
- expect ( change ) . to . have . property ( '_id' ) . that . deep . equals ( changeStream . resumeToken ) ;
414
- expect ( resumeToken ) . to . not . equal ( changeStream . resumeToken ) ;
415
- }
415
+ // Consuming the change causes the ChangeStream to cache the resume token.
416
+ const change = await changeStream . next ( ) ;
417
+ expect ( change ) . to . have . property ( '_id' ) . that . deep . equals ( changeStream . resumeToken ) ;
418
+ expect ( resumeToken ) . to . not . equal ( changeStream . resumeToken ) ;
419
+ }
420
+ } ) ;
416
421
} ) ;
417
422
} ) ;
418
423
0 commit comments