jasmine-core 2.6.4 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/jasmine-core/jasmine-html.js +1 -1
- data/lib/jasmine-core/jasmine.js +227 -87
- data/lib/jasmine-core/spec/core/EnvSpec.js +42 -0
- data/lib/jasmine-core/spec/core/PrettyPrintSpec.js +44 -0
- data/lib/jasmine-core/spec/core/QueueRunnerSpec.js +230 -9
- data/lib/jasmine-core/spec/core/SpecSpec.js +29 -8
- data/lib/jasmine-core/spec/core/SuiteSpec.js +11 -1
- data/lib/jasmine-core/spec/core/UserContextSpec.js +54 -0
- data/lib/jasmine-core/spec/core/integration/EnvSpec.js +38 -7
- data/lib/jasmine-core/spec/core/integration/SpecRunningSpec.js +111 -0
- data/lib/jasmine-core/spec/core/matchers/matchersUtilSpec.js +34 -0
- data/lib/jasmine-core/spec/core/matchers/toBeCloseToSpec.js +42 -0
- data/lib/jasmine-core/spec/core/matchers/toEqualSpec.js +31 -0
- data/lib/jasmine-core/spec/helpers/asyncAwait.js +27 -0
- data/lib/jasmine-core/spec/helpers/checkForMap.js +22 -0
- data/lib/jasmine-core/spec/html/HtmlReporterSpec.js +4 -21
- data/lib/jasmine-core/version.rb +1 -1
- metadata +5 -2
@@ -91,6 +91,13 @@ describe("Env", function() {
|
|
91
91
|
env.it('pending spec');
|
92
92
|
}).not.toThrow();
|
93
93
|
});
|
94
|
+
|
95
|
+
it('accepts an async function', function() {
|
96
|
+
jasmine.getEnv().requireAsyncAwait();
|
97
|
+
expect(function() {
|
98
|
+
env.it('async', jasmine.getEnv().makeAsyncAwaitFunction());
|
99
|
+
}).not.toThrow();
|
100
|
+
});
|
94
101
|
});
|
95
102
|
|
96
103
|
describe('#xit', function() {
|
@@ -114,6 +121,13 @@ describe("Env", function() {
|
|
114
121
|
env.xit('pending spec');
|
115
122
|
}).not.toThrow();
|
116
123
|
});
|
124
|
+
|
125
|
+
it('accepts an async function', function() {
|
126
|
+
jasmine.getEnv().requireAsyncAwait();
|
127
|
+
expect(function() {
|
128
|
+
env.xit('async', jasmine.getEnv().makeAsyncAwaitFunction());
|
129
|
+
}).not.toThrow();
|
130
|
+
});
|
117
131
|
});
|
118
132
|
|
119
133
|
describe('#fit', function () {
|
@@ -130,6 +144,13 @@ describe("Env", function() {
|
|
130
144
|
env.beforeEach(undefined);
|
131
145
|
}).toThrowError(/beforeEach expects a function argument; received \[object (Undefined|DOMWindow|Object)\]/);
|
132
146
|
});
|
147
|
+
|
148
|
+
it('accepts an async function', function() {
|
149
|
+
jasmine.getEnv().requireAsyncAwait();
|
150
|
+
expect(function() {
|
151
|
+
env.beforeEach(jasmine.getEnv().makeAsyncAwaitFunction());
|
152
|
+
}).not.toThrow();
|
153
|
+
});
|
133
154
|
});
|
134
155
|
|
135
156
|
describe('#beforeAll', function () {
|
@@ -138,6 +159,13 @@ describe("Env", function() {
|
|
138
159
|
env.beforeAll(undefined);
|
139
160
|
}).toThrowError(/beforeAll expects a function argument; received \[object (Undefined|DOMWindow|Object)\]/);
|
140
161
|
});
|
162
|
+
|
163
|
+
it('accepts an async function', function() {
|
164
|
+
jasmine.getEnv().requireAsyncAwait();
|
165
|
+
expect(function() {
|
166
|
+
env.beforeAll(jasmine.getEnv().makeAsyncAwaitFunction());
|
167
|
+
}).not.toThrow();
|
168
|
+
});
|
141
169
|
});
|
142
170
|
|
143
171
|
describe('#afterEach', function () {
|
@@ -146,6 +174,13 @@ describe("Env", function() {
|
|
146
174
|
env.afterEach(undefined);
|
147
175
|
}).toThrowError(/afterEach expects a function argument; received \[object (Undefined|DOMWindow|Object)\]/);
|
148
176
|
});
|
177
|
+
|
178
|
+
it('accepts an async function', function() {
|
179
|
+
jasmine.getEnv().requireAsyncAwait();
|
180
|
+
expect(function() {
|
181
|
+
env.afterEach(jasmine.getEnv().makeAsyncAwaitFunction());
|
182
|
+
}).not.toThrow();
|
183
|
+
});
|
149
184
|
});
|
150
185
|
|
151
186
|
describe('#afterAll', function () {
|
@@ -154,5 +189,12 @@ describe("Env", function() {
|
|
154
189
|
env.afterAll(undefined);
|
155
190
|
}).toThrowError(/afterAll expects a function argument; received \[object (Undefined|DOMWindow|Object)\]/);
|
156
191
|
});
|
192
|
+
|
193
|
+
it('accepts an async function', function() {
|
194
|
+
jasmine.getEnv().requireAsyncAwait();
|
195
|
+
expect(function() {
|
196
|
+
env.afterAll(jasmine.getEnv().makeAsyncAwaitFunction());
|
197
|
+
}).not.toThrow();
|
198
|
+
});
|
157
199
|
});
|
158
200
|
});
|
@@ -33,6 +33,26 @@ describe("jasmineUnderTest.pp", function () {
|
|
33
33
|
})
|
34
34
|
});
|
35
35
|
|
36
|
+
describe('stringify maps', function() {
|
37
|
+
it("should stringify maps properly", function() {
|
38
|
+
jasmine.getEnv().requireFunctioningMaps();
|
39
|
+
expect(jasmineUnderTest.pp(new Map([[1, 2]]))).toEqual("Map( [ 1, 2 ] )");
|
40
|
+
});
|
41
|
+
|
42
|
+
it("should truncate maps with more elments than jasmineUnderTest.MAX_PRETTY_PRINT_ARRAY_LENGTH", function() {
|
43
|
+
jasmine.getEnv().requireFunctioningMaps();
|
44
|
+
var originalMaxSize = jasmineUnderTest.MAX_PRETTY_PRINT_ARRAY_LENGTH;
|
45
|
+
|
46
|
+
try {
|
47
|
+
jasmineUnderTest.MAX_PRETTY_PRINT_ARRAY_LENGTH = 2;
|
48
|
+
expect(jasmineUnderTest.pp(new Map([["a", 1], ["b", 2], ["c", 3]]))).toEqual("Map( [ 'a', 1 ], [ 'b', 2 ], ... )");
|
49
|
+
} finally {
|
50
|
+
jasmineUnderTest.MAX_PRETTY_PRINT_ARRAY_LENGTH = originalMaxSize;
|
51
|
+
}
|
52
|
+
})
|
53
|
+
});
|
54
|
+
|
55
|
+
|
36
56
|
describe('stringify arrays', function() {
|
37
57
|
it("should stringify arrays properly", function() {
|
38
58
|
expect(jasmineUnderTest.pp([1, 2])).toEqual("[ 1, 2 ]");
|
@@ -99,6 +119,18 @@ describe("jasmineUnderTest.pp", function () {
|
|
99
119
|
}, bar: [1, 2, 3]})).toEqual("Object({ foo: Function, bar: [ 1, 2, 3 ] })");
|
100
120
|
});
|
101
121
|
|
122
|
+
it("should truncate objects with too many keys", function () {
|
123
|
+
var originalMaxLength = jasmineUnderTest.MAX_PRETTY_PRINT_ARRAY_LENGTH;
|
124
|
+
var long = {a: 1, b: 2, c: 3};
|
125
|
+
|
126
|
+
try {
|
127
|
+
jasmineUnderTest.MAX_PRETTY_PRINT_ARRAY_LENGTH = 2;
|
128
|
+
expect(jasmineUnderTest.pp(long)).toEqual("Object({ a: 1, b: 2, ... })");
|
129
|
+
} finally {
|
130
|
+
jasmineUnderTest.MAX_PRETTY_PRINT_ARRAY_LENGTH = originalMaxLength;
|
131
|
+
}
|
132
|
+
});
|
133
|
+
|
102
134
|
it("should print 'null' as the constructor of an object with its own constructor property", function() {
|
103
135
|
expect(jasmineUnderTest.pp({constructor: function() {}})).toContain("null({");
|
104
136
|
expect(jasmineUnderTest.pp({constructor: 'foo'})).toContain("null({");
|
@@ -225,6 +257,18 @@ describe("jasmineUnderTest.pp", function () {
|
|
225
257
|
}
|
226
258
|
});
|
227
259
|
|
260
|
+
it("should stringify objects have have a toString that isn't a function", function() {
|
261
|
+
var obj = {
|
262
|
+
toString: "foo"
|
263
|
+
};
|
264
|
+
|
265
|
+
if (jasmine.getEnv().ieVersion < 9) {
|
266
|
+
expect(jasmineUnderTest.pp(obj)).toEqual("Object({ })");
|
267
|
+
} else {
|
268
|
+
expect(jasmineUnderTest.pp(obj)).toEqual("Object({ toString: 'foo' })");
|
269
|
+
}
|
270
|
+
});
|
271
|
+
|
228
272
|
it("should stringify objects from anonymous constructors with custom toString", function () {
|
229
273
|
var MyAnonymousConstructor = (function() { return function () {}; })();
|
230
274
|
MyAnonymousConstructor.toString = function () { return ''; };
|
@@ -19,6 +19,26 @@ describe("QueueRunner", function() {
|
|
19
19
|
expect(calls).toEqual(['fn1', 'fn2']);
|
20
20
|
});
|
21
21
|
|
22
|
+
it("runs cleanup functions after the others", function() {
|
23
|
+
var calls = [],
|
24
|
+
queueableFn1 = { fn: jasmine.createSpy('fn1') },
|
25
|
+
queueableFn2 = { fn: jasmine.createSpy('fn2') },
|
26
|
+
queueRunner = new jasmineUnderTest.QueueRunner({
|
27
|
+
queueableFns: [queueableFn1],
|
28
|
+
cleanupFns: [queueableFn2]
|
29
|
+
});
|
30
|
+
queueableFn1.fn.and.callFake(function() {
|
31
|
+
calls.push('fn1');
|
32
|
+
});
|
33
|
+
queueableFn2.fn.and.callFake(function() {
|
34
|
+
calls.push('fn2');
|
35
|
+
});
|
36
|
+
|
37
|
+
queueRunner.execute();
|
38
|
+
|
39
|
+
expect(calls).toEqual(['fn1', 'fn2']);
|
40
|
+
});
|
41
|
+
|
22
42
|
it("calls each function with a consistent 'this'-- an empty object", function() {
|
23
43
|
var queueableFn1 = { fn: jasmine.createSpy('fn1') },
|
24
44
|
queueableFn2 = { fn: jasmine.createSpy('fn2') },
|
@@ -31,7 +51,7 @@ describe("QueueRunner", function() {
|
|
31
51
|
queueRunner.execute();
|
32
52
|
|
33
53
|
var context = queueableFn1.fn.calls.first().object;
|
34
|
-
expect(context).toEqual(
|
54
|
+
expect(context).toEqual(new jasmineUnderTest.UserContext());
|
35
55
|
expect(queueableFn2.fn.calls.first().object).toBe(context);
|
36
56
|
expect(asyncContext).toBe(context);
|
37
57
|
});
|
@@ -170,7 +190,6 @@ describe("QueueRunner", function() {
|
|
170
190
|
|
171
191
|
queueRunner.execute();
|
172
192
|
|
173
|
-
jasmine.clock().tick();
|
174
193
|
expect(onComplete).toHaveBeenCalled();
|
175
194
|
expect(onException).toHaveBeenCalled();
|
176
195
|
|
@@ -303,6 +322,84 @@ describe("QueueRunner", function() {
|
|
303
322
|
});
|
304
323
|
});
|
305
324
|
|
325
|
+
describe("with a function that returns a promise", function() {
|
326
|
+
function StubPromise() {}
|
327
|
+
|
328
|
+
StubPromise.prototype.then = function(resolve, reject) {
|
329
|
+
this.resolveHandler = resolve;
|
330
|
+
this.rejectHandler = reject;
|
331
|
+
};
|
332
|
+
|
333
|
+
beforeEach(function() {
|
334
|
+
jasmine.clock().install();
|
335
|
+
});
|
336
|
+
|
337
|
+
afterEach(function() {
|
338
|
+
jasmine.clock().uninstall();
|
339
|
+
});
|
340
|
+
|
341
|
+
it("runs the function asynchronously, advancing once the promise is settled", function() {
|
342
|
+
var onComplete = jasmine.createSpy('onComplete'),
|
343
|
+
fnCallback = jasmine.createSpy('fnCallback'),
|
344
|
+
p1 = new StubPromise(),
|
345
|
+
p2 = new StubPromise(),
|
346
|
+
queueableFn1 = { fn: function() {
|
347
|
+
setTimeout(function() {
|
348
|
+
p1.resolveHandler();
|
349
|
+
}, 100);
|
350
|
+
return p1;
|
351
|
+
} };
|
352
|
+
queueableFn2 = { fn: function() {
|
353
|
+
fnCallback();
|
354
|
+
setTimeout(function() {
|
355
|
+
p2.resolveHandler();
|
356
|
+
}, 100);
|
357
|
+
return p2;
|
358
|
+
} },
|
359
|
+
queueRunner = new jasmineUnderTest.QueueRunner({
|
360
|
+
queueableFns: [queueableFn1, queueableFn2],
|
361
|
+
onComplete: onComplete
|
362
|
+
});
|
363
|
+
|
364
|
+
queueRunner.execute();
|
365
|
+
expect(fnCallback).not.toHaveBeenCalled();
|
366
|
+
expect(onComplete).not.toHaveBeenCalled();
|
367
|
+
|
368
|
+
jasmine.clock().tick(100);
|
369
|
+
|
370
|
+
expect(fnCallback).toHaveBeenCalled();
|
371
|
+
expect(onComplete).not.toHaveBeenCalled();
|
372
|
+
|
373
|
+
jasmine.clock().tick(100);
|
374
|
+
|
375
|
+
expect(onComplete).toHaveBeenCalled();
|
376
|
+
});
|
377
|
+
|
378
|
+
it("fails the function when the promise is rejected", function() {
|
379
|
+
var promise = new StubPromise(),
|
380
|
+
queueableFn1 = { fn: function() {
|
381
|
+
setTimeout(function() { promise.rejectHandler('foo'); }, 100);
|
382
|
+
return promise;
|
383
|
+
} },
|
384
|
+
queueableFn2 = { fn: jasmine.createSpy('fn2') },
|
385
|
+
failFn = jasmine.createSpy('fail'),
|
386
|
+
queueRunner = new jasmineUnderTest.QueueRunner({
|
387
|
+
queueableFns: [queueableFn1, queueableFn2],
|
388
|
+
fail: failFn
|
389
|
+
});
|
390
|
+
|
391
|
+
queueRunner.execute();
|
392
|
+
|
393
|
+
expect(failFn).not.toHaveBeenCalled();
|
394
|
+
expect(queueableFn2.fn).not.toHaveBeenCalled();
|
395
|
+
|
396
|
+
jasmine.clock().tick(100);
|
397
|
+
|
398
|
+
expect(failFn).toHaveBeenCalledWith('foo');
|
399
|
+
expect(queueableFn2.fn).toHaveBeenCalled();
|
400
|
+
});
|
401
|
+
});
|
402
|
+
|
306
403
|
it("calls exception handlers when an exception is thrown in a fn", function() {
|
307
404
|
var queueableFn = { type: 'queueable',
|
308
405
|
fn: function() {
|
@@ -336,20 +433,95 @@ describe("QueueRunner", function() {
|
|
336
433
|
it("continues running the functions even after an exception is thrown in an async spec", function() {
|
337
434
|
var queueableFn = { fn: function(done) { throw new Error("error"); } },
|
338
435
|
nextQueueableFn = { fn: jasmine.createSpy("nextFunction") },
|
339
|
-
timeout = { setTimeout: jasmine.createSpy("setTimeout"),
|
340
|
-
clearTimeout: jasmine.createSpy("setTimeout")
|
341
|
-
},
|
342
436
|
queueRunner = new jasmineUnderTest.QueueRunner({
|
343
|
-
queueableFns: [queueableFn, nextQueueableFn]
|
344
|
-
timeout: timeout
|
437
|
+
queueableFns: [queueableFn, nextQueueableFn]
|
345
438
|
});
|
346
439
|
|
347
440
|
queueRunner.execute();
|
348
|
-
timeout.setTimeout.calls.argsFor(0)[0]();
|
349
|
-
|
350
441
|
expect(nextQueueableFn.fn).toHaveBeenCalled();
|
351
442
|
});
|
352
443
|
|
444
|
+
describe("When configured to complete on first error", function() {
|
445
|
+
it("skips to cleanup functions on the first exception", function() {
|
446
|
+
var queueableFn = { fn: function() { throw new Error("error"); } },
|
447
|
+
nextQueueableFn = { fn: jasmine.createSpy("nextFunction") },
|
448
|
+
cleanupFn = { fn: jasmine.createSpy("cleanup") },
|
449
|
+
queueRunner = new jasmineUnderTest.QueueRunner({
|
450
|
+
queueableFns: [queueableFn, nextQueueableFn],
|
451
|
+
cleanupFns: [cleanupFn],
|
452
|
+
completeOnFirstError: true
|
453
|
+
});
|
454
|
+
|
455
|
+
queueRunner.execute();
|
456
|
+
expect(nextQueueableFn.fn).not.toHaveBeenCalled();
|
457
|
+
expect(cleanupFn.fn).toHaveBeenCalled();
|
458
|
+
});
|
459
|
+
|
460
|
+
it("does not skip when a cleanup function throws", function() {
|
461
|
+
var queueableFn = { fn: function() { } },
|
462
|
+
cleanupFn1 = { fn: function() { throw new Error("error"); } },
|
463
|
+
cleanupFn2 = { fn: jasmine.createSpy("cleanupFn2") },
|
464
|
+
queueRunner = new jasmineUnderTest.QueueRunner({
|
465
|
+
queueableFns: [queueableFn],
|
466
|
+
cleanupFns: [cleanupFn1, cleanupFn2],
|
467
|
+
completeOnFirstError: true
|
468
|
+
});
|
469
|
+
|
470
|
+
queueRunner.execute();
|
471
|
+
expect(cleanupFn2.fn).toHaveBeenCalled();
|
472
|
+
});
|
473
|
+
|
474
|
+
describe("with an asynchronous function", function() {
|
475
|
+
beforeEach(function() {
|
476
|
+
jasmine.clock().install();
|
477
|
+
});
|
478
|
+
|
479
|
+
afterEach(function() {
|
480
|
+
jasmine.clock().uninstall();
|
481
|
+
});
|
482
|
+
|
483
|
+
|
484
|
+
it("skips to cleanup functions on the first exception", function() {
|
485
|
+
var errorListeners = [],
|
486
|
+
queueableFn = { fn: function(done) {} },
|
487
|
+
nextQueueableFn = { fn: jasmine.createSpy('nextFunction') },
|
488
|
+
cleanupFn = { fn: jasmine.createSpy('cleanup') },
|
489
|
+
queueRunner = new jasmineUnderTest.QueueRunner({
|
490
|
+
globalErrors: {
|
491
|
+
pushListener: function(f) { errorListeners.push(f); },
|
492
|
+
popListener: function() { errorListeners.pop(); },
|
493
|
+
},
|
494
|
+
queueableFns: [queueableFn, nextQueueableFn],
|
495
|
+
cleanupFns: [cleanupFn],
|
496
|
+
completeOnFirstError: true,
|
497
|
+
});
|
498
|
+
|
499
|
+
queueRunner.execute();
|
500
|
+
errorListeners[errorListeners.length - 1](new Error('error'));
|
501
|
+
expect(nextQueueableFn.fn).not.toHaveBeenCalled();
|
502
|
+
expect(cleanupFn.fn).toHaveBeenCalled();
|
503
|
+
});
|
504
|
+
|
505
|
+
it("skips to cleanup functions when next.fail is called", function() {
|
506
|
+
var queueableFn = { fn: function(done) {
|
507
|
+
done.fail('nope');
|
508
|
+
} },
|
509
|
+
nextQueueableFn = { fn: jasmine.createSpy('nextFunction') },
|
510
|
+
cleanupFn = { fn: jasmine.createSpy('cleanup') },
|
511
|
+
queueRunner = new jasmineUnderTest.QueueRunner({
|
512
|
+
queueableFns: [queueableFn, nextQueueableFn],
|
513
|
+
cleanupFns: [cleanupFn],
|
514
|
+
completeOnFirstError: true,
|
515
|
+
});
|
516
|
+
|
517
|
+
queueRunner.execute();
|
518
|
+
jasmine.clock().tick();
|
519
|
+
expect(nextQueueableFn.fn).not.toHaveBeenCalled();
|
520
|
+
expect(cleanupFn.fn).toHaveBeenCalled();
|
521
|
+
});
|
522
|
+
});
|
523
|
+
});
|
524
|
+
|
353
525
|
it("calls a provided complete callback when done", function() {
|
354
526
|
var queueableFn = { fn: jasmine.createSpy('fn') },
|
355
527
|
completeCallback = jasmine.createSpy('completeCallback'),
|
@@ -393,4 +565,53 @@ describe("QueueRunner", function() {
|
|
393
565
|
expect(completeCallback).toHaveBeenCalled();
|
394
566
|
});
|
395
567
|
});
|
568
|
+
|
569
|
+
describe('when user context has not been defined', function() {
|
570
|
+
beforeEach(function() {
|
571
|
+
var fn;
|
572
|
+
|
573
|
+
this.fn = fn = jasmine.createSpy('fn1');
|
574
|
+
this.queueRunner = new jasmineUnderTest.QueueRunner({
|
575
|
+
queueableFns: [{ fn: fn }]
|
576
|
+
});
|
577
|
+
});
|
578
|
+
|
579
|
+
it('runs the functions on the scope of a UserContext', function() {
|
580
|
+
var calls = [],
|
581
|
+
context;
|
582
|
+
|
583
|
+
this.fn.and.callFake(function() {
|
584
|
+
context = this;
|
585
|
+
});
|
586
|
+
|
587
|
+
this.queueRunner.execute();
|
588
|
+
|
589
|
+
expect(context.constructor).toBe(jasmineUnderTest.UserContext);
|
590
|
+
});
|
591
|
+
});
|
592
|
+
|
593
|
+
describe('when user context has been defined', function() {
|
594
|
+
beforeEach(function() {
|
595
|
+
var fn, context;
|
596
|
+
|
597
|
+
this.fn = fn = jasmine.createSpy('fn1');
|
598
|
+
this.context = context = new jasmineUnderTest.UserContext();
|
599
|
+
this.queueRunner = new jasmineUnderTest.QueueRunner({
|
600
|
+
queueableFns: [{ fn: fn }],
|
601
|
+
userContext: context
|
602
|
+
});
|
603
|
+
});
|
604
|
+
|
605
|
+
it('runs the functions on the scope of a UserContext', function() {
|
606
|
+
var calls = [],
|
607
|
+
context;
|
608
|
+
this.fn.and.callFake(function() {
|
609
|
+
context = this;
|
610
|
+
});
|
611
|
+
|
612
|
+
this.queueRunner.execute();
|
613
|
+
|
614
|
+
expect(context).toBe(this.context);
|
615
|
+
});
|
616
|
+
});
|
396
617
|
});
|
@@ -103,8 +103,26 @@ describe("Spec", function() {
|
|
103
103
|
|
104
104
|
spec.execute();
|
105
105
|
|
106
|
-
var
|
107
|
-
expect(
|
106
|
+
var options = fakeQueueRunner.calls.mostRecent().args[0];
|
107
|
+
expect(options.queueableFns).toEqual([before, queueableFn]);
|
108
|
+
expect(options.cleanupFns).toEqual([after]);
|
109
|
+
});
|
110
|
+
|
111
|
+
it("tells the queue runner that it's a leaf node", function() {
|
112
|
+
var fakeQueueRunner = jasmine.createSpy('fakeQueueRunner'),
|
113
|
+
spec = new jasmineUnderTest.Spec({
|
114
|
+
queueableFn: { fn: function() {} },
|
115
|
+
beforeAndAfterFns: function() {
|
116
|
+
return {befores: [], afters: []}
|
117
|
+
},
|
118
|
+
queueRunnerFactory: fakeQueueRunner
|
119
|
+
});
|
120
|
+
|
121
|
+
spec.execute();
|
122
|
+
|
123
|
+
expect(fakeQueueRunner).toHaveBeenCalledWith(jasmine.objectContaining({
|
124
|
+
isLeaf: true
|
125
|
+
}));
|
108
126
|
});
|
109
127
|
|
110
128
|
it("is marked pending if created without a function body", function() {
|
@@ -123,7 +141,8 @@ describe("Spec", function() {
|
|
123
141
|
});
|
124
142
|
|
125
143
|
it("can be disabled, but still calls callbacks", function() {
|
126
|
-
var fakeQueueRunner = jasmine.createSpy('fakeQueueRunner')
|
144
|
+
var fakeQueueRunner = jasmine.createSpy('fakeQueueRunner')
|
145
|
+
.and.callFake(function(attrs) { attrs.onComplete(); }),
|
127
146
|
startCallback = jasmine.createSpy('startCallback'),
|
128
147
|
specBody = jasmine.createSpy('specBody'),
|
129
148
|
resultCallback = jasmine.createSpy('resultCallback'),
|
@@ -140,7 +159,7 @@ describe("Spec", function() {
|
|
140
159
|
|
141
160
|
spec.execute();
|
142
161
|
|
143
|
-
expect(fakeQueueRunner).
|
162
|
+
expect(fakeQueueRunner).toHaveBeenCalled();
|
144
163
|
expect(specBody).not.toHaveBeenCalled();
|
145
164
|
|
146
165
|
expect(startCallback).toHaveBeenCalled();
|
@@ -148,7 +167,8 @@ describe("Spec", function() {
|
|
148
167
|
});
|
149
168
|
|
150
169
|
it("can be disabled at execution time by a parent", function() {
|
151
|
-
var fakeQueueRunner = jasmine.createSpy('fakeQueueRunner')
|
170
|
+
var fakeQueueRunner = jasmine.createSpy('fakeQueueRunner')
|
171
|
+
.and.callFake(function(attrs) { attrs.onComplete(); }),
|
152
172
|
startCallback = jasmine.createSpy('startCallback'),
|
153
173
|
specBody = jasmine.createSpy('specBody'),
|
154
174
|
resultCallback = jasmine.createSpy('resultCallback'),
|
@@ -163,7 +183,7 @@ describe("Spec", function() {
|
|
163
183
|
|
164
184
|
expect(spec.result.status).toBe('disabled');
|
165
185
|
|
166
|
-
expect(fakeQueueRunner).
|
186
|
+
expect(fakeQueueRunner).toHaveBeenCalled();
|
167
187
|
expect(specBody).not.toHaveBeenCalled();
|
168
188
|
|
169
189
|
expect(startCallback).toHaveBeenCalled();
|
@@ -171,7 +191,8 @@ describe("Spec", function() {
|
|
171
191
|
});
|
172
192
|
|
173
193
|
it("can be marked pending, but still calls callbacks when executed", function() {
|
174
|
-
var fakeQueueRunner = jasmine.createSpy('fakeQueueRunner')
|
194
|
+
var fakeQueueRunner = jasmine.createSpy('fakeQueueRunner')
|
195
|
+
.and.callFake(function(attrs) { attrs.onComplete(); }),
|
175
196
|
startCallback = jasmine.createSpy('startCallback'),
|
176
197
|
resultCallback = jasmine.createSpy('resultCallback'),
|
177
198
|
spec = new jasmineUnderTest.Spec({
|
@@ -191,7 +212,7 @@ describe("Spec", function() {
|
|
191
212
|
|
192
213
|
spec.execute();
|
193
214
|
|
194
|
-
expect(fakeQueueRunner).
|
215
|
+
expect(fakeQueueRunner).toHaveBeenCalled();
|
195
216
|
|
196
217
|
expect(startCallback).toHaveBeenCalled();
|
197
218
|
expect(resultCallback).toHaveBeenCalledWith({
|