jasmine-core 2.0.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/lib/console/console.js +27 -22
  3. data/lib/jasmine-core.js +2 -0
  4. data/lib/jasmine-core.rb +6 -2
  5. data/lib/jasmine-core/__init__.py +1 -0
  6. data/lib/jasmine-core/boot.js +1 -1
  7. data/lib/jasmine-core/boot/node_boot.js +71 -0
  8. data/lib/jasmine-core/core.py +60 -0
  9. data/lib/jasmine-core/example/node_example/spec/PlayerSpec.js +60 -0
  10. data/lib/jasmine-core/example/node_example/spec/SpecHelper.js +15 -0
  11. data/lib/jasmine-core/example/node_example/src/Player.js +24 -0
  12. data/lib/jasmine-core/example/node_example/src/Song.js +9 -0
  13. data/lib/jasmine-core/jasmine-html.js +104 -73
  14. data/lib/jasmine-core/jasmine.css +58 -54
  15. data/lib/jasmine-core/jasmine.js +368 -254
  16. data/lib/jasmine-core/node_boot.js +93 -0
  17. data/lib/jasmine-core/spec/console/ConsoleReporterSpec.js +12 -0
  18. data/lib/jasmine-core/spec/core/AnySpec.js +1 -0
  19. data/lib/jasmine-core/spec/core/ClockSpec.js +103 -17
  20. data/lib/jasmine-core/spec/core/DelayedFunctionSchedulerSpec.js +1 -1
  21. data/lib/jasmine-core/spec/core/EnvSpec.js +14 -14
  22. data/lib/jasmine-core/spec/core/ExceptionFormatterSpec.js +7 -0
  23. data/lib/jasmine-core/spec/core/ExceptionsSpec.js +2 -2
  24. data/lib/jasmine-core/spec/core/ExpectationSpec.js +34 -0
  25. data/lib/jasmine-core/spec/core/MockDateSpec.js +179 -0
  26. data/lib/jasmine-core/spec/core/ObjectContainingSpec.js +6 -0
  27. data/lib/jasmine-core/spec/core/PrettyPrintSpec.js +41 -10
  28. data/lib/jasmine-core/spec/core/QueueRunnerSpec.js +130 -31
  29. data/lib/jasmine-core/spec/core/SpecSpec.js +27 -88
  30. data/lib/jasmine-core/spec/core/TimerSpec.js +18 -0
  31. data/lib/jasmine-core/spec/core/integration/EnvSpec.js +20 -2
  32. data/lib/jasmine-core/spec/core/matchers/matchersUtilSpec.js +8 -0
  33. data/lib/jasmine-core/spec/core/matchers/toBeGreaterThanSpec.js +2 -1
  34. data/lib/jasmine-core/spec/core/matchers/toBeNaNSpec.js +3 -2
  35. data/lib/jasmine-core/spec/core/matchers/toBeUndefinedSpec.js +2 -1
  36. data/lib/jasmine-core/spec/core/matchers/toContainSpec.js +4 -2
  37. data/lib/jasmine-core/spec/core/matchers/toHaveBeenCalledSpec.js +2 -1
  38. data/lib/jasmine-core/spec/core/matchers/toHaveBeenCalledWithSpec.js +17 -3
  39. data/lib/jasmine-core/spec/core/matchers/toThrowErrorSpec.js +11 -11
  40. data/lib/jasmine-core/spec/core/matchers/toThrowSpec.js +5 -5
  41. data/lib/jasmine-core/spec/helpers/defineJasmineUnderTest.js +7 -0
  42. data/lib/jasmine-core/spec/helpers/nodeDefineJasmineUnderTest.js +33 -0
  43. data/lib/jasmine-core/spec/html/HtmlReporterSpec.js +155 -35
  44. data/lib/jasmine-core/spec/html/PrettyPrintHtmlSpec.js +1 -1
  45. data/lib/jasmine-core/spec/performance/large_object_test.js +36 -0
  46. data/lib/jasmine-core/version.rb +1 -1
  47. metadata +34 -23
  48. data/lib/jasmine-core/spec/node_suite.js +0 -187
  49. data/lib/jasmine-core/spec/support/dev_boot.js +0 -124
@@ -0,0 +1,179 @@
1
+ describe("FakeDate", function() {
2
+ it("does not fail if no global date is found", function() {
3
+ var fakeGlobal = {},
4
+ mockDate = new j$.MockDate(fakeGlobal);
5
+
6
+ expect(function() {
7
+ mockDate.install();
8
+ mockDate.tick(0);
9
+ mockDate.uninstall();
10
+ }).not.toThrow();
11
+ });
12
+
13
+ it("replaces the global Date when it is installed", function() {
14
+ var globalDate = jasmine.createSpy("global Date").and.callFake(function() {
15
+ return {
16
+ getTime: function() {}
17
+ }
18
+ }),
19
+ fakeGlobal = { Date: globalDate },
20
+ mockDate = new j$.MockDate(fakeGlobal);
21
+
22
+ expect(fakeGlobal.Date).toEqual(globalDate);
23
+ mockDate.install();
24
+
25
+ expect(fakeGlobal.Date).not.toEqual(globalDate);
26
+ });
27
+
28
+ it("replaces the global Date on uninstall", function() {
29
+ var globalDate = jasmine.createSpy("global Date").and.callFake(function() {
30
+ return {
31
+ getTime: function() {}
32
+ }
33
+ }),
34
+ fakeGlobal = { Date: globalDate },
35
+ mockDate = new j$.MockDate(fakeGlobal);
36
+
37
+ mockDate.install();
38
+ mockDate.uninstall();
39
+
40
+ expect(fakeGlobal.Date).toEqual(globalDate);
41
+ });
42
+
43
+ it("takes the current time as the base when installing without parameters", function() {
44
+ var globalDate = jasmine.createSpy("global Date").and.callFake(function() {
45
+ return {
46
+ getTime: function() {
47
+ return 1000;
48
+ }
49
+ }
50
+ }),
51
+ fakeGlobal = { Date: globalDate },
52
+ mockDate = new j$.MockDate(fakeGlobal);
53
+
54
+ mockDate.install();
55
+
56
+ globalDate.calls.reset();
57
+ new fakeGlobal.Date();
58
+ expect(globalDate).toHaveBeenCalledWith(1000);
59
+ });
60
+
61
+ it("can accept a date as time base when installing", function() {
62
+ var fakeGlobal = { Date: Date },
63
+ mockDate = new j$.MockDate(fakeGlobal),
64
+ baseDate = new Date();
65
+
66
+ spyOn(baseDate, 'getTime').and.returnValue(123);
67
+ mockDate.install(baseDate);
68
+
69
+ expect(new fakeGlobal.Date().getTime()).toEqual(123);
70
+ });
71
+
72
+ it("makes real dates", function() {
73
+ var fakeGlobal = { Date: Date },
74
+ mockDate = new j$.MockDate(fakeGlobal);
75
+
76
+ mockDate.install();
77
+ expect(new fakeGlobal.Date()).toEqual(jasmine.any(Date));
78
+ });
79
+
80
+ it("fakes current time when using Date.now()", function() {
81
+ var globalDate = jasmine.createSpy("global Date").and.callFake(function() {
82
+ return {
83
+ getTime: function() {
84
+ return 1000;
85
+ }
86
+ }
87
+ }),
88
+ fakeGlobal = { Date: globalDate };
89
+
90
+ globalDate.now = function() {};
91
+ var mockDate = new j$.MockDate(fakeGlobal);
92
+
93
+ mockDate.install();
94
+
95
+ expect(fakeGlobal.Date.now()).toEqual(1000);
96
+ });
97
+
98
+ it("does not stub Date.now() if it doesn't already exist", function() {
99
+ var globalDate = jasmine.createSpy("global Date").and.callFake(function() {
100
+ return {
101
+ getTime: function() {
102
+ return 1000;
103
+ }
104
+ }
105
+ }),
106
+ fakeGlobal = { Date: globalDate },
107
+ mockDate = new j$.MockDate(fakeGlobal);
108
+
109
+ mockDate.install();
110
+
111
+ expect(fakeGlobal.Date.now).toThrowError("Browser does not support Date.now()");
112
+ });
113
+
114
+ it("makes time passes using tick", function() {
115
+ var globalDate = jasmine.createSpy("global Date").and.callFake(function() {
116
+ return {
117
+ getTime: function() {
118
+ return 1000;
119
+ }
120
+ }
121
+ }),
122
+ fakeGlobal = { Date: globalDate };
123
+
124
+ globalDate.now = function() {};
125
+ var mockDate = new j$.MockDate(fakeGlobal);
126
+
127
+ mockDate.install();
128
+
129
+ mockDate.tick(100);
130
+
131
+ expect(fakeGlobal.Date.now()).toEqual(1100);
132
+
133
+ mockDate.tick(1000);
134
+
135
+ expect(fakeGlobal.Date.now()).toEqual(2100);
136
+ });
137
+
138
+ it("allows to increase 0 milliseconds using tick", function() {
139
+ var globalDate = jasmine.createSpy("global Date").and.callFake(function() {
140
+ return {
141
+ getTime: function() {
142
+ return 1000;
143
+ }
144
+ }
145
+ }),
146
+ fakeGlobal = { Date: globalDate };
147
+
148
+ globalDate.now = function() {};
149
+ var mockDate = new j$.MockDate(fakeGlobal);
150
+
151
+ mockDate.install();
152
+
153
+ mockDate.tick(0);
154
+ expect(fakeGlobal.Date.now()).toEqual(1000);
155
+
156
+ mockDate.tick();
157
+ expect(fakeGlobal.Date.now()).toEqual(1000);
158
+ });
159
+
160
+ it("allows to create a Date in a different time than the mocked time", function() {
161
+ var fakeGlobal = { Date: Date },
162
+ mockDate = new j$.MockDate(fakeGlobal),
163
+ baseDate = new Date(2013, 9, 23, 0, 0, 0, 0);
164
+
165
+ mockDate.install(baseDate);
166
+
167
+ var otherDate = new fakeGlobal.Date(2013, 9, 23, 0, 0, 1, 0);
168
+ expect(otherDate.getTime()).not.toEqual(baseDate.getTime());
169
+ });
170
+
171
+ it("copies all Date properties to the mocked date", function() {
172
+ var fakeGlobal = { Date: Date },
173
+ mockDate = new j$.MockDate(fakeGlobal);
174
+
175
+ mockDate.install();
176
+
177
+ expect(fakeGlobal.Date.UTC(2013, 9, 23)).toEqual(Date.UTC(2013, 9, 23));
178
+ });
179
+ });
@@ -61,4 +61,10 @@ describe("ObjectContaining", function() {
61
61
 
62
62
  expect(containing.jasmineToString()).toMatch("<jasmine.objectContaining");
63
63
  });
64
+
65
+ it("matches recursively", function() {
66
+ var containing = new j$.ObjectContaining({one: new j$.ObjectContaining({two: {}})});
67
+
68
+ expect(containing.jasmineMatches({one: {two: {}}})).toBe(true);
69
+ });
64
70
  });
@@ -11,6 +11,7 @@ describe("j$.pp", function () {
11
11
  expect(j$.pp(jasmine.undefined)).toEqual("undefined");
12
12
  expect(j$.pp(3)).toEqual("3");
13
13
  expect(j$.pp(-3.14)).toEqual("-3.14");
14
+ expect(j$.pp(-0)).toEqual("-0");
14
15
  });
15
16
 
16
17
  it("should stringify arrays properly", function() {
@@ -26,10 +27,10 @@ describe("j$.pp", function () {
26
27
  });
27
28
 
28
29
  it("should stringify objects properly", function() {
29
- expect(j$.pp({foo: 'bar'})).toEqual("{ foo : 'bar' }");
30
- expect(j$.pp({foo:'bar', baz:3, nullValue: null, undefinedValue: jasmine.undefined})).toEqual("{ foo : 'bar', baz : 3, nullValue : null, undefinedValue : undefined }");
30
+ expect(j$.pp({foo: 'bar'})).toEqual("{ foo: 'bar' }");
31
+ expect(j$.pp({foo:'bar', baz:3, nullValue: null, undefinedValue: jasmine.undefined})).toEqual("{ foo: 'bar', baz: 3, nullValue: null, undefinedValue: undefined }");
31
32
  expect(j$.pp({foo: function () {
32
- }, bar: [1, 2, 3]})).toEqual("{ foo : Function, bar : [ 1, 2, 3 ] }");
33
+ }, bar: [1, 2, 3]})).toEqual("{ foo: Function, bar: [ 1, 2, 3 ] }");
33
34
  });
34
35
 
35
36
  it("should not include inherited properties when stringifying an object", function() {
@@ -37,7 +38,7 @@ describe("j$.pp", function () {
37
38
  SomeClass.prototype.foo = "inherited foo";
38
39
  var instance = new SomeClass();
39
40
  instance.bar = "my own bar";
40
- expect(j$.pp(instance)).toEqual("{ bar : 'my own bar' }");
41
+ expect(j$.pp(instance)).toEqual("{ bar: 'my own bar' }");
41
42
  });
42
43
 
43
44
  it("should not recurse objects and arrays more deeply than j$.MAX_PRETTY_PRINT_DEPTH", function() {
@@ -47,21 +48,42 @@ describe("j$.pp", function () {
47
48
 
48
49
  try {
49
50
  j$.MAX_PRETTY_PRINT_DEPTH = 2;
50
- expect(j$.pp(nestedObject)).toEqual("{ level1 : { level2 : Object } }");
51
+ expect(j$.pp(nestedObject)).toEqual("{ level1: { level2: Object } }");
51
52
  expect(j$.pp(nestedArray)).toEqual("[ 1, [ 2, Array ] ]");
52
53
 
53
54
  j$.MAX_PRETTY_PRINT_DEPTH = 3;
54
- expect(j$.pp(nestedObject)).toEqual("{ level1 : { level2 : { level3 : Object } } }");
55
+ expect(j$.pp(nestedObject)).toEqual("{ level1: { level2: { level3: Object } } }");
55
56
  expect(j$.pp(nestedArray)).toEqual("[ 1, [ 2, [ 3, Array ] ] ]");
56
57
 
57
58
  j$.MAX_PRETTY_PRINT_DEPTH = 4;
58
- expect(j$.pp(nestedObject)).toEqual("{ level1 : { level2 : { level3 : { level4 : 'leaf' } } } }");
59
+ expect(j$.pp(nestedObject)).toEqual("{ level1: { level2: { level3: { level4: 'leaf' } } } }");
59
60
  expect(j$.pp(nestedArray)).toEqual("[ 1, [ 2, [ 3, [ 4, 'leaf' ] ] ] ]");
60
61
  } finally {
61
62
  j$.MAX_PRETTY_PRINT_DEPTH = originalMaxDepth;
62
63
  }
63
64
  });
64
65
 
66
+ it("should stringify immutable circular objects", function(){
67
+ if(Object.freeze){
68
+ var frozenObject = {foo: {bar: 'baz'}};
69
+ frozenObject.circular = frozenObject;
70
+ frozenObject = Object.freeze(frozenObject);
71
+ expect(j$.pp(frozenObject)).toEqual("{ foo: { bar: 'baz' }, circular: <circular reference: Object> }");
72
+ }
73
+ });
74
+
75
+ it("should truncate arrays that are longer than j$.MAX_PRETTY_PRINT_ARRAY_LENGTH", function() {
76
+ var originalMaxLength = j$.MAX_PRETTY_PRINT_ARRAY_LENGTH;
77
+ var array = [1, 2, 3];
78
+
79
+ try {
80
+ j$.MAX_PRETTY_PRINT_ARRAY_LENGTH = 2;
81
+ expect(j$.pp(array)).toEqual("[ 1, 2, ... ]");
82
+ } finally {
83
+ j$.MAX_PRETTY_PRINT_ARRAY_LENGTH = originalMaxLength;
84
+ }
85
+ });
86
+
65
87
  it("should stringify RegExp objects properly", function() {
66
88
  expect(j$.pp(/x|y|z/)).toEqual("/x|y|z/");
67
89
  });
@@ -69,7 +91,7 @@ describe("j$.pp", function () {
69
91
  it("should indicate circular object references", function() {
70
92
  var sampleValue = {foo: 'hello'};
71
93
  sampleValue.nested = sampleValue;
72
- expect(j$.pp(sampleValue)).toEqual("{ foo : 'hello', nested : <circular reference: Object> }");
94
+ expect(j$.pp(sampleValue)).toEqual("{ foo: 'hello', nested: <circular reference: Object> }");
73
95
  });
74
96
 
75
97
  it("should indicate getters on objects as such", function() {
@@ -81,10 +103,10 @@ describe("j$.pp", function () {
81
103
  });
82
104
  }
83
105
  if (sampleValue.__defineGetter__) {
84
- expect(j$.pp(sampleValue)).toEqual("{ id : 1, calculatedValue : <getter> }");
106
+ expect(j$.pp(sampleValue)).toEqual("{ id: 1, calculatedValue: <getter> }");
85
107
  }
86
108
  else {
87
- expect(j$.pp(sampleValue)).toEqual("{ id : 1 }");
109
+ expect(j$.pp(sampleValue)).toEqual("{ id: 1 }");
88
110
  }
89
111
  });
90
112
 
@@ -121,5 +143,14 @@ describe("j$.pp", function () {
121
143
 
122
144
  expect(j$.pp(obj)).toEqual("strung");
123
145
  });
146
+
147
+ it("should handle objects with null prototype", function() {
148
+ if (jasmine.getEnv().ieVersion < 9) { return; }
149
+
150
+ var obj = Object.create(null);
151
+ obj.foo = 'bar';
152
+
153
+ expect(j$.pp(obj)).toEqual("{ foo: 'bar' }");
154
+ });
124
155
  });
125
156
 
@@ -50,31 +50,25 @@ describe("QueueRunner", function() {
50
50
  //createSpy('asyncfn').and.callFake(function(done) {});
51
51
 
52
52
  var onComplete = jasmine.createSpy('onComplete'),
53
- beforeCallback = jasmine.createSpy('beforeCallback'),
54
- fnCallback = jasmine.createSpy('fnCallback'),
55
- afterCallback = jasmine.createSpy('afterCallback'),
56
- fn1 = function(done) {
57
- beforeCallback();
58
- setTimeout(function() {
59
- done()
60
- }, 100);
61
- },
62
- fn2 = function(done) {
63
- fnCallback();
64
- setTimeout(function() {
65
- done()
66
- }, 100);
67
- },
68
- fn3 = function(done) {
69
- afterCallback();
70
- setTimeout(function() {
71
- done()
72
- }, 100);
73
- },
74
- queueRunner = new j$.QueueRunner({
75
- fns: [fn1, fn2, fn3],
76
- onComplete: onComplete
77
- });
53
+ beforeCallback = jasmine.createSpy('beforeCallback'),
54
+ fnCallback = jasmine.createSpy('fnCallback'),
55
+ afterCallback = jasmine.createSpy('afterCallback'),
56
+ fn1 = function(done) {
57
+ beforeCallback();
58
+ setTimeout(done, 100);
59
+ },
60
+ fn2 = function(done) {
61
+ fnCallback();
62
+ setTimeout(done, 100);
63
+ },
64
+ fn3 = function(done) {
65
+ afterCallback();
66
+ setTimeout(done, 100);
67
+ },
68
+ queueRunner = new j$.QueueRunner({
69
+ fns: [fn1, fn2, fn3],
70
+ onComplete: onComplete
71
+ });
78
72
 
79
73
  queueRunner.execute();
80
74
 
@@ -98,6 +92,112 @@ describe("QueueRunner", function() {
98
92
 
99
93
  expect(onComplete).toHaveBeenCalled();
100
94
  });
95
+
96
+ it("sets a timeout if requested for asynchronous functions so they don't go on forever", function() {
97
+ var beforeFn = function(done) { },
98
+ fn = jasmine.createSpy('fn'),
99
+ onComplete = jasmine.createSpy('onComplete'),
100
+ onException = jasmine.createSpy('onException'),
101
+ queueRunner = new j$.QueueRunner({
102
+ fns: [beforeFn, fn],
103
+ onComplete: onComplete,
104
+ onException: onException,
105
+ enforceTimeout: function() { return true; }
106
+ });
107
+
108
+ queueRunner.execute();
109
+ expect(fn).not.toHaveBeenCalled();
110
+
111
+ jasmine.clock().tick(j$.DEFAULT_TIMEOUT_INTERVAL);
112
+
113
+ expect(onException).toHaveBeenCalledWith(jasmine.any(Error));
114
+ expect(fn).toHaveBeenCalled();
115
+ expect(onComplete).toHaveBeenCalled();
116
+ });
117
+
118
+ it("by default does not set a timeout for asynchronous functions", function() {
119
+ var beforeFn = function(done) { },
120
+ fn = jasmine.createSpy('fn'),
121
+ onComplete = jasmine.createSpy('onComplete'),
122
+ onException = jasmine.createSpy('onException'),
123
+ queueRunner = new j$.QueueRunner({
124
+ fns: [beforeFn, fn],
125
+ onComplete: onComplete,
126
+ onException: onException,
127
+ });
128
+
129
+ queueRunner.execute();
130
+ expect(fn).not.toHaveBeenCalled();
131
+
132
+ jasmine.clock().tick(j$.DEFAULT_TIMEOUT_INTERVAL);
133
+
134
+ expect(onException).not.toHaveBeenCalled();
135
+ expect(fn).not.toHaveBeenCalled();
136
+ expect(onComplete).not.toHaveBeenCalled();
137
+ });
138
+
139
+ it("clears the timeout when an async function throws an exception, to prevent additional onException calls", function() {
140
+ var fn = function(done) { throw new Error("error!"); },
141
+ onComplete = jasmine.createSpy('onComplete'),
142
+ onException = jasmine.createSpy('onException'),
143
+ queueRunner = new j$.QueueRunner({
144
+ fns: [fn],
145
+ onComplete: onComplete,
146
+ onException: onException
147
+ });
148
+
149
+ queueRunner.execute();
150
+
151
+ expect(onComplete).toHaveBeenCalled();
152
+ expect(onException).toHaveBeenCalled();
153
+
154
+ jasmine.clock().tick(j$.DEFAULT_TIMEOUT_INTERVAL);
155
+ expect(onException.calls.count()).toEqual(1);
156
+ });
157
+
158
+ it("clears the timeout when the done callback is called", function() {
159
+ var fn = function(done) { done(); },
160
+ onComplete = jasmine.createSpy('onComplete'),
161
+ onException = jasmine.createSpy('onException'),
162
+ queueRunner = new j$.QueueRunner({
163
+ fns: [fn],
164
+ onComplete: onComplete,
165
+ onException: onException
166
+ });
167
+
168
+ queueRunner.execute();
169
+
170
+ expect(onComplete).toHaveBeenCalled();
171
+
172
+ jasmine.clock().tick(j$.DEFAULT_TIMEOUT_INTERVAL);
173
+ expect(onException).not.toHaveBeenCalled();
174
+ });
175
+
176
+ it("only moves to the next spec the first time you call done", function() {
177
+ var fn = function(done) {done(); done();},
178
+ nextFn = jasmine.createSpy('nextFn');
179
+ queueRunner = new j$.QueueRunner({
180
+ fns: [fn, nextFn]
181
+ });
182
+
183
+ queueRunner.execute();
184
+ expect(nextFn.calls.count()).toEqual(1);
185
+ });
186
+
187
+ it("does not move to the next spec if done is called after an exception has ended the spec", function() {
188
+ var fn = function(done) {
189
+ setTimeout(done, 1);
190
+ throw new Error('error!');
191
+ },
192
+ nextFn = jasmine.createSpy('nextFn');
193
+ queueRunner = new j$.QueueRunner({
194
+ fns: [fn, nextFn]
195
+ });
196
+
197
+ queueRunner.execute();
198
+ jasmine.clock().tick(1);
199
+ expect(nextFn.calls.count()).toEqual(1);
200
+ });
101
201
  });
102
202
 
103
203
  it("calls an exception handler when an exception is thrown in a fn", function() {
@@ -124,16 +224,15 @@ describe("QueueRunner", function() {
124
224
  catchException: function(e) { return false; }
125
225
  });
126
226
 
127
- expect(function() { queueRunner.execute(); }).toThrow();
227
+ expect(queueRunner.execute).toThrow();
128
228
  });
129
229
 
130
230
  it("continues running the functions even after an exception is thrown in an async spec", function() {
131
231
  var fn = function(done) { throw new Error("error"); },
132
- nextFn = jasmine.createSpy("nextFunction");
133
-
134
- queueRunner = new j$.QueueRunner({
135
- fns: [fn, nextFn]
136
- });
232
+ nextFn = jasmine.createSpy("nextFunction"),
233
+ queueRunner = new j$.QueueRunner({
234
+ fns: [fn, nextFn]
235
+ });
137
236
 
138
237
  queueRunner.execute();
139
238
  expect(nextFn).toHaveBeenCalled();