@@ -25,13 +25,36 @@ describe('examples(change-stream):', function() {
25
25
db = undefined ;
26
26
} ) ;
27
27
28
+ class Looper {
29
+ constructor ( lambda , interval ) {
30
+ this . _run = false ;
31
+ this . _lambda = lambda ;
32
+ this . _interval = interval || 50 ;
33
+ }
34
+
35
+ async _go ( ) {
36
+ this . _run = true ;
37
+ while ( this . _run ) {
38
+ await new Promise ( r => setTimeout ( r , this . _interval ) ) ;
39
+ await this . _lambda ( ) ;
40
+ }
41
+ }
42
+
43
+ run ( ) {
44
+ this . _p = this . _go ( ) . catch ( ( ) => { } ) ;
45
+ }
46
+
47
+ stop ( ) {
48
+ this . _run = false ;
49
+ return this . _p ;
50
+ }
51
+ }
52
+
28
53
it ( 'Open A Change Stream' , {
29
54
metadata : { requires : { topology : [ 'replicaset' ] , mongodb : '>=3.6.0' } } ,
30
55
test : async function ( ) {
31
- await db . collection ( 'inventory' ) . insertOne ( { a : 1 } ) ;
32
- const interval = setInterval ( async function ( ) {
33
- await db . collection ( 'inventory' ) . insertOne ( { a : 1 } ) ;
34
- } , 500 ) ;
56
+ const looper = new Looper ( ( ) => db . collection ( 'inventory' ) . insertOne ( { a : 1 } ) ) ;
57
+ looper . run ( ) ;
35
58
36
59
// Start Changestream Example 1
37
60
const collection = db . collection ( 'inventory' ) ;
@@ -48,7 +71,7 @@ describe('examples(change-stream):', function() {
48
71
49
72
await changeStream . close ( ) ;
50
73
await changeStreamIterator . close ( ) ;
51
- clearInterval ( interval ) ;
74
+ await looper . stop ( ) ;
52
75
53
76
expect ( next )
54
77
. to . have . property ( 'operationType' )
@@ -60,9 +83,10 @@ describe('examples(change-stream):', function() {
60
83
metadata : { requires : { topology : [ 'replicaset' ] , mongodb : '>=3.6.0' } } ,
61
84
test : async function ( ) {
62
85
await db . collection ( 'inventory' ) . insertOne ( { a : 1 , b : 2 } ) ;
63
- setTimeout ( async function ( ) {
64
- await db . collection ( 'inventory' ) . updateOne ( { a : 1 } , { $set : { a : 2 } } ) ;
65
- } , 250 ) ;
86
+ const looper = new Looper ( ( ) =>
87
+ db . collection ( 'inventory' ) . updateOne ( { a : 1 } , { $set : { a : 2 } } )
88
+ ) ;
89
+ looper . run ( ) ;
66
90
67
91
// Start Changestream Example 2
68
92
const collection = db . collection ( 'inventory' ) ;
@@ -79,6 +103,7 @@ describe('examples(change-stream):', function() {
79
103
80
104
await changeStream . close ( ) ;
81
105
await changeStreamIterator . close ( ) ;
106
+ await looper . stop ( ) ;
82
107
83
108
expect ( next )
84
109
. to . have . property ( 'operationType' )
@@ -92,10 +117,11 @@ describe('examples(change-stream):', function() {
92
117
it ( 'Resume a Change Stream' , {
93
118
metadata : { requires : { topology : [ 'replicaset' ] , mongodb : '>=3.6.0' } } ,
94
119
test : async function ( ) {
95
- setTimeout ( async function ( ) {
120
+ const looper = new Looper ( async ( ) => {
96
121
await db . collection ( 'inventory' ) . insertOne ( { a : 1 } ) ;
97
122
await db . collection ( 'inventory' ) . insertOne ( { b : 2 } ) ;
98
- } , 250 ) ;
123
+ } ) ;
124
+ looper . run ( ) ;
99
125
100
126
// Start Changestream Example 3
101
127
const collection = db . collection ( 'inventory' ) ;
@@ -126,6 +152,7 @@ describe('examples(change-stream):', function() {
126
152
127
153
await newChangeStreamIterator . close ( ) ;
128
154
await newChangeStream . close ( ) ;
155
+ await looper . stop ( ) ;
129
156
130
157
expect ( change1 ) . to . have . nested . property ( 'fullDocument.a' , 1 ) ;
131
158
expect ( change2 ) . to . have . nested . property ( 'fullDocument.b' , 2 ) ;
@@ -135,9 +162,10 @@ describe('examples(change-stream):', function() {
135
162
it ( 'Modify Change Stream Output' , {
136
163
metadata : { requires : { topology : [ 'replicaset' ] , mongodb : '>=3.6.0' } } ,
137
164
test : async function ( ) {
138
- setTimeout ( async function ( ) {
165
+ const looper = new Looper ( async ( ) => {
139
166
await db . collection ( 'inventory' ) . insertOne ( { username : 'alice' } ) ;
140
- } , 250 ) ;
167
+ } ) ;
168
+ looper . run ( ) ;
141
169
142
170
// Start Changestream Example 4
143
171
const pipeline = [
@@ -159,6 +187,7 @@ describe('examples(change-stream):', function() {
159
187
160
188
await changeStream . close ( ) ;
161
189
await changeStreamIterator . close ( ) ;
190
+ await looper . stop ( ) ;
162
191
163
192
expect ( next ) . to . have . nested . property ( 'fullDocument.username' , 'alice' ) ;
164
193
expect ( next ) . to . have . property ( 'newField' , 'this is an added field!' ) ;
0 commit comments