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.
- checksums.yaml +4 -4
- data/lib/console/console.js +27 -22
- data/lib/jasmine-core.js +2 -0
- data/lib/jasmine-core.rb +6 -2
- data/lib/jasmine-core/__init__.py +1 -0
- data/lib/jasmine-core/boot.js +1 -1
- data/lib/jasmine-core/boot/node_boot.js +71 -0
- data/lib/jasmine-core/core.py +60 -0
- data/lib/jasmine-core/example/node_example/spec/PlayerSpec.js +60 -0
- data/lib/jasmine-core/example/node_example/spec/SpecHelper.js +15 -0
- data/lib/jasmine-core/example/node_example/src/Player.js +24 -0
- data/lib/jasmine-core/example/node_example/src/Song.js +9 -0
- data/lib/jasmine-core/jasmine-html.js +104 -73
- data/lib/jasmine-core/jasmine.css +58 -54
- data/lib/jasmine-core/jasmine.js +368 -254
- data/lib/jasmine-core/node_boot.js +93 -0
- data/lib/jasmine-core/spec/console/ConsoleReporterSpec.js +12 -0
- data/lib/jasmine-core/spec/core/AnySpec.js +1 -0
- data/lib/jasmine-core/spec/core/ClockSpec.js +103 -17
- data/lib/jasmine-core/spec/core/DelayedFunctionSchedulerSpec.js +1 -1
- data/lib/jasmine-core/spec/core/EnvSpec.js +14 -14
- data/lib/jasmine-core/spec/core/ExceptionFormatterSpec.js +7 -0
- data/lib/jasmine-core/spec/core/ExceptionsSpec.js +2 -2
- data/lib/jasmine-core/spec/core/ExpectationSpec.js +34 -0
- data/lib/jasmine-core/spec/core/MockDateSpec.js +179 -0
- data/lib/jasmine-core/spec/core/ObjectContainingSpec.js +6 -0
- data/lib/jasmine-core/spec/core/PrettyPrintSpec.js +41 -10
- data/lib/jasmine-core/spec/core/QueueRunnerSpec.js +130 -31
- data/lib/jasmine-core/spec/core/SpecSpec.js +27 -88
- data/lib/jasmine-core/spec/core/TimerSpec.js +18 -0
- data/lib/jasmine-core/spec/core/integration/EnvSpec.js +20 -2
- data/lib/jasmine-core/spec/core/matchers/matchersUtilSpec.js +8 -0
- data/lib/jasmine-core/spec/core/matchers/toBeGreaterThanSpec.js +2 -1
- data/lib/jasmine-core/spec/core/matchers/toBeNaNSpec.js +3 -2
- data/lib/jasmine-core/spec/core/matchers/toBeUndefinedSpec.js +2 -1
- data/lib/jasmine-core/spec/core/matchers/toContainSpec.js +4 -2
- data/lib/jasmine-core/spec/core/matchers/toHaveBeenCalledSpec.js +2 -1
- data/lib/jasmine-core/spec/core/matchers/toHaveBeenCalledWithSpec.js +17 -3
- data/lib/jasmine-core/spec/core/matchers/toThrowErrorSpec.js +11 -11
- data/lib/jasmine-core/spec/core/matchers/toThrowSpec.js +5 -5
- data/lib/jasmine-core/spec/helpers/defineJasmineUnderTest.js +7 -0
- data/lib/jasmine-core/spec/helpers/nodeDefineJasmineUnderTest.js +33 -0
- data/lib/jasmine-core/spec/html/HtmlReporterSpec.js +155 -35
- data/lib/jasmine-core/spec/html/PrettyPrintHtmlSpec.js +1 -1
- data/lib/jasmine-core/spec/performance/large_object_test.js +36 -0
- data/lib/jasmine-core/version.rb +1 -1
- metadata +34 -23
- data/lib/jasmine-core/spec/node_suite.js +0 -187
- data/lib/jasmine-core/spec/support/dev_boot.js +0 -124
@@ -0,0 +1,93 @@
|
|
1
|
+
/*
|
2
|
+
Copyright (c) 2008-2014 Pivotal Labs
|
3
|
+
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
a copy of this software and associated documentation files (the
|
6
|
+
"Software"), to deal in the Software without restriction, including
|
7
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
*/
|
23
|
+
module.exports = function(jasmineRequire) {
|
24
|
+
var jasmine = jasmineRequire.core(jasmineRequire);
|
25
|
+
|
26
|
+
var consoleFns = require('../console/console.js');
|
27
|
+
consoleFns.console(consoleFns, jasmine);
|
28
|
+
|
29
|
+
var env = jasmine.getEnv();
|
30
|
+
|
31
|
+
var jasmineInterface = {
|
32
|
+
describe: function(description, specDefinitions) {
|
33
|
+
return env.describe(description, specDefinitions);
|
34
|
+
},
|
35
|
+
|
36
|
+
xdescribe: function(description, specDefinitions) {
|
37
|
+
return env.xdescribe(description, specDefinitions);
|
38
|
+
},
|
39
|
+
|
40
|
+
it: function(desc, func) {
|
41
|
+
return env.it(desc, func);
|
42
|
+
},
|
43
|
+
|
44
|
+
xit: function(desc, func) {
|
45
|
+
return env.xit(desc, func);
|
46
|
+
},
|
47
|
+
|
48
|
+
beforeEach: function(beforeEachFunction) {
|
49
|
+
return env.beforeEach(beforeEachFunction);
|
50
|
+
},
|
51
|
+
|
52
|
+
afterEach: function(afterEachFunction) {
|
53
|
+
return env.afterEach(afterEachFunction);
|
54
|
+
},
|
55
|
+
|
56
|
+
expect: function(actual) {
|
57
|
+
return env.expect(actual);
|
58
|
+
},
|
59
|
+
|
60
|
+
spyOn: function(obj, methodName) {
|
61
|
+
return env.spyOn(obj, methodName);
|
62
|
+
},
|
63
|
+
|
64
|
+
jsApiReporter: new jasmine.JsApiReporter({
|
65
|
+
timer: new jasmine.Timer()
|
66
|
+
}),
|
67
|
+
|
68
|
+
|
69
|
+
jasmine: jasmine
|
70
|
+
};
|
71
|
+
|
72
|
+
extend(global, jasmineInterface);
|
73
|
+
|
74
|
+
jasmine.addCustomEqualityTester = function(tester) {
|
75
|
+
env.addCustomEqualityTester(tester);
|
76
|
+
};
|
77
|
+
|
78
|
+
jasmine.addMatchers = function(matchers) {
|
79
|
+
return env.addMatchers(matchers);
|
80
|
+
};
|
81
|
+
|
82
|
+
jasmine.clock = function() {
|
83
|
+
return env.clock;
|
84
|
+
};
|
85
|
+
|
86
|
+
function extend(destination, source) {
|
87
|
+
for (var property in source) destination[property] = source[property];
|
88
|
+
return destination;
|
89
|
+
}
|
90
|
+
|
91
|
+
|
92
|
+
return jasmine;
|
93
|
+
};
|
@@ -80,6 +80,18 @@ describe("ConsoleReporter", function() {
|
|
80
80
|
expect(out.getOutput()).toEqual("*");
|
81
81
|
});
|
82
82
|
|
83
|
+
it("alerts user if there are no specs", function(){
|
84
|
+
var reporter = new j$.ConsoleReporter({
|
85
|
+
print: out.print
|
86
|
+
});
|
87
|
+
|
88
|
+
reporter.jasmineStarted();
|
89
|
+
out.clear();
|
90
|
+
reporter.jasmineDone();
|
91
|
+
|
92
|
+
expect(out.getOutput()).toMatch(/No specs found/);
|
93
|
+
});
|
94
|
+
|
83
95
|
it("reports a summary when done (singular spec and time)", function() {
|
84
96
|
var timerSpy = jasmine.createSpyObj('timer', ['start', 'elapsed']),
|
85
97
|
reporter = new j$.ConsoleReporter({
|
@@ -5,7 +5,8 @@ describe("Clock", function() {
|
|
5
5
|
fakeGlobal = { setTimeout: fakeSetTimeout },
|
6
6
|
delayedFunctionScheduler = jasmine.createSpyObj("delayedFunctionScheduler", ["scheduleFunction"]),
|
7
7
|
delayedFn = jasmine.createSpy("delayedFn"),
|
8
|
-
|
8
|
+
mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
|
9
|
+
clock = new j$.Clock(fakeGlobal, delayedFunctionScheduler, mockDate);
|
9
10
|
|
10
11
|
fakeGlobal.setTimeout(delayedFn, 0);
|
11
12
|
|
@@ -26,7 +27,8 @@ describe("Clock", function() {
|
|
26
27
|
fakeGlobal = { clearTimeout: fakeClearTimeout },
|
27
28
|
delayedFunctionScheduler = jasmine.createSpyObj("delayedFunctionScheduler", ["removeFunctionWithId"]),
|
28
29
|
delayedFn = jasmine.createSpy("delayedFn"),
|
29
|
-
|
30
|
+
mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
|
31
|
+
clock = new j$.Clock(fakeGlobal, delayedFunctionScheduler, mockDate);
|
30
32
|
|
31
33
|
fakeGlobal.clearTimeout("foo");
|
32
34
|
|
@@ -47,7 +49,8 @@ describe("Clock", function() {
|
|
47
49
|
fakeGlobal = { setInterval: fakeSetInterval },
|
48
50
|
delayedFunctionScheduler = jasmine.createSpyObj("delayedFunctionScheduler", ["scheduleFunction"]),
|
49
51
|
delayedFn = jasmine.createSpy("delayedFn"),
|
50
|
-
|
52
|
+
mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
|
53
|
+
clock = new j$.Clock(fakeGlobal, delayedFunctionScheduler, mockDate);
|
51
54
|
|
52
55
|
fakeGlobal.setInterval(delayedFn, 0);
|
53
56
|
|
@@ -68,7 +71,8 @@ describe("Clock", function() {
|
|
68
71
|
fakeGlobal = { clearInterval: fakeClearInterval },
|
69
72
|
delayedFunctionScheduler = jasmine.createSpyObj("delayedFunctionScheduler", ["removeFunctionWithId"]),
|
70
73
|
delayedFn = jasmine.createSpy("delayedFn"),
|
71
|
-
|
74
|
+
mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
|
75
|
+
clock = new j$.Clock(fakeGlobal, delayedFunctionScheduler, mockDate);
|
72
76
|
|
73
77
|
fakeGlobal.clearInterval("foo");
|
74
78
|
|
@@ -97,7 +101,8 @@ describe("Clock", function() {
|
|
97
101
|
},
|
98
102
|
delayedFunctionScheduler = jasmine.createSpyObj("delayedFunctionScheduler", ["scheduleFunction", "reset"]),
|
99
103
|
delayedFn = jasmine.createSpy("delayedFn"),
|
100
|
-
|
104
|
+
mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
|
105
|
+
clock = new j$.Clock(fakeGlobal, delayedFunctionScheduler, mockDate);
|
101
106
|
|
102
107
|
clock.install();
|
103
108
|
clock.uninstall();
|
@@ -119,7 +124,8 @@ describe("Clock", function() {
|
|
119
124
|
delayedFunctionScheduler = { scheduleFunction: scheduleFunction },
|
120
125
|
fakeGlobal = { setTimeout: fakeSetTimeout },
|
121
126
|
delayedFn = jasmine.createSpy('delayedFn'),
|
122
|
-
|
127
|
+
mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
|
128
|
+
clock = new j$.Clock(fakeGlobal, delayedFunctionScheduler, mockDate);
|
123
129
|
|
124
130
|
clock.install();
|
125
131
|
clock.setTimeout(delayedFn, 0, 'a', 'b');
|
@@ -135,7 +141,8 @@ describe("Clock", function() {
|
|
135
141
|
delayedFunctionScheduler = {scheduleFunction: scheduleFunction},
|
136
142
|
fakeGlobal = { setTimeout: fakeSetTimeout },
|
137
143
|
delayedFn = jasmine.createSpy('delayedFn'),
|
138
|
-
|
144
|
+
mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
|
145
|
+
clock = new j$.Clock(fakeGlobal, delayedFunctionScheduler, mockDate),
|
139
146
|
timeoutId;
|
140
147
|
|
141
148
|
clock.install();
|
@@ -149,7 +156,8 @@ describe("Clock", function() {
|
|
149
156
|
delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['removeFunctionWithId']),
|
150
157
|
fakeGlobal = { setTimeout: fakeClearTimeout },
|
151
158
|
delayedFn = jasmine.createSpy('delayedFn'),
|
152
|
-
|
159
|
+
mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
|
160
|
+
clock = new j$.Clock(fakeGlobal, delayedFunctionScheduler, mockDate);
|
153
161
|
|
154
162
|
clock.install();
|
155
163
|
clock.clearTimeout(123);
|
@@ -164,7 +172,8 @@ describe("Clock", function() {
|
|
164
172
|
delayedFunctionScheduler = {scheduleFunction: scheduleFunction},
|
165
173
|
fakeGlobal = { setInterval: fakeSetInterval },
|
166
174
|
delayedFn = jasmine.createSpy('delayedFn'),
|
167
|
-
|
175
|
+
mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
|
176
|
+
clock = new j$.Clock(fakeGlobal, delayedFunctionScheduler, mockDate);
|
168
177
|
|
169
178
|
clock.install();
|
170
179
|
clock.setInterval(delayedFn, 0, 'a', 'b');
|
@@ -180,7 +189,8 @@ describe("Clock", function() {
|
|
180
189
|
delayedFunctionScheduler = {scheduleFunction: scheduleFunction},
|
181
190
|
fakeGlobal = { setInterval: fakeSetInterval },
|
182
191
|
delayedFn = jasmine.createSpy('delayedFn'),
|
183
|
-
|
192
|
+
mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
|
193
|
+
clock = new j$.Clock(fakeGlobal, delayedFunctionScheduler, mockDate),
|
184
194
|
intervalId;
|
185
195
|
|
186
196
|
clock.install();
|
@@ -194,7 +204,8 @@ describe("Clock", function() {
|
|
194
204
|
delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['removeFunctionWithId']),
|
195
205
|
fakeGlobal = { setInterval: clearInterval },
|
196
206
|
delayedFn = jasmine.createSpy('delayedFn'),
|
197
|
-
|
207
|
+
mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
|
208
|
+
clock = new j$.Clock(fakeGlobal, delayedFunctionScheduler, mockDate);
|
198
209
|
|
199
210
|
clock.install();
|
200
211
|
clock.clearInterval(123);
|
@@ -220,7 +231,8 @@ describe("Clock", function() {
|
|
220
231
|
setTimeout: fakeSetTimeout,
|
221
232
|
setInterval: fakeSetInterval
|
222
233
|
},
|
223
|
-
|
234
|
+
mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
|
235
|
+
clock = new j$.Clock(fakeGlobal, delayedFunctionScheduler, mockDate);
|
224
236
|
|
225
237
|
fakeSetTimeout.apply = null;
|
226
238
|
fakeSetInterval.apply = null;
|
@@ -249,7 +261,8 @@ describe("Clock (acceptance)", function() {
|
|
249
261
|
delayedFn3 = jasmine.createSpy('delayedFn3'),
|
250
262
|
recurring1 = jasmine.createSpy('recurring1'),
|
251
263
|
delayedFunctionScheduler = new j$.DelayedFunctionScheduler(),
|
252
|
-
|
264
|
+
mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
|
265
|
+
clock = new j$.Clock({setTimeout: setTimeout}, delayedFunctionScheduler, mockDate);
|
253
266
|
|
254
267
|
clock.install();
|
255
268
|
|
@@ -295,7 +308,8 @@ describe("Clock (acceptance)", function() {
|
|
295
308
|
it("can clear a previously set timeout", function() {
|
296
309
|
var clearedFn = jasmine.createSpy('clearedFn'),
|
297
310
|
delayedFunctionScheduler = new j$.DelayedFunctionScheduler(),
|
298
|
-
|
311
|
+
mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
|
312
|
+
clock = new j$.Clock({setTimeout: function() {}}, delayedFunctionScheduler, mockDate),
|
299
313
|
timeoutId;
|
300
314
|
|
301
315
|
clock.install();
|
@@ -312,7 +326,8 @@ describe("Clock (acceptance)", function() {
|
|
312
326
|
it("correctly schedules functions after the Clock has advanced", function() {
|
313
327
|
var delayedFn1 = jasmine.createSpy('delayedFn1'),
|
314
328
|
delayedFunctionScheduler = new j$.DelayedFunctionScheduler(),
|
315
|
-
|
329
|
+
mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
|
330
|
+
clock = new j$.Clock({setTimeout: function() {}}, delayedFunctionScheduler, mockDate);
|
316
331
|
|
317
332
|
clock.install();
|
318
333
|
|
@@ -328,7 +343,8 @@ describe("Clock (acceptance)", function() {
|
|
328
343
|
var delayedFn1 = jasmine.createSpy('delayedFn1'),
|
329
344
|
delayedFn2 = jasmine.createSpy('delayedFn2'),
|
330
345
|
delayedFunctionScheduler = new j$.DelayedFunctionScheduler(),
|
331
|
-
|
346
|
+
mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
|
347
|
+
clock = new j$.Clock({setTimeout: function() {}}, delayedFunctionScheduler, mockDate);
|
332
348
|
|
333
349
|
delayedFn1.and.callFake(function() { clock.setTimeout(delayedFn2, 0); });
|
334
350
|
clock.install();
|
@@ -346,7 +362,8 @@ describe("Clock (acceptance)", function() {
|
|
346
362
|
var delayedFn1 = jasmine.createSpy('delayedFn1'),
|
347
363
|
delayedFn2 = jasmine.createSpy('delayedFn2'),
|
348
364
|
delayedFunctionScheduler = new j$.DelayedFunctionScheduler(),
|
349
|
-
|
365
|
+
mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} },
|
366
|
+
clock = new j$.Clock({setTimeout: function() {}}, delayedFunctionScheduler, mockDate);
|
350
367
|
|
351
368
|
delayedFn1.and.callFake(function() { clock.setTimeout(delayedFn2, 1); });
|
352
369
|
clock.install();
|
@@ -356,4 +373,73 @@ describe("Clock (acceptance)", function() {
|
|
356
373
|
expect(delayedFn1).toHaveBeenCalled();
|
357
374
|
expect(delayedFn2).toHaveBeenCalled();
|
358
375
|
});
|
376
|
+
|
377
|
+
it("does not mock the Date object by default", function() {
|
378
|
+
var delayedFunctionScheduler = new j$.DelayedFunctionScheduler(),
|
379
|
+
global = {Date: Date},
|
380
|
+
mockDate = new j$.MockDate(global),
|
381
|
+
clock = new j$.Clock({setTimeout: setTimeout}, delayedFunctionScheduler, mockDate);
|
382
|
+
|
383
|
+
clock.install();
|
384
|
+
|
385
|
+
expect(global.Date).toEqual(Date);
|
386
|
+
|
387
|
+
var now = new global.Date().getTime();
|
388
|
+
|
389
|
+
clock.tick(50);
|
390
|
+
|
391
|
+
expect(new global.Date().getTime() - now).not.toEqual(50);
|
392
|
+
});
|
393
|
+
|
394
|
+
it("mocks the Date object and sets it to current time", function() {
|
395
|
+
var delayedFunctionScheduler = new j$.DelayedFunctionScheduler(),
|
396
|
+
global = {Date: Date},
|
397
|
+
mockDate = new j$.MockDate(global),
|
398
|
+
clock = new j$.Clock({setTimeout: setTimeout}, delayedFunctionScheduler, mockDate);
|
399
|
+
|
400
|
+
clock.install().mockDate();
|
401
|
+
|
402
|
+
var now = new global.Date().getTime();
|
403
|
+
|
404
|
+
clock.tick(50);
|
405
|
+
|
406
|
+
expect(new global.Date().getTime() - now).toEqual(50);
|
407
|
+
|
408
|
+
var timeoutDate = 0;
|
409
|
+
clock.setTimeout(function() {
|
410
|
+
timeoutDate = new global.Date().getTime();
|
411
|
+
}, 100);
|
412
|
+
|
413
|
+
clock.tick(100);
|
414
|
+
|
415
|
+
expect(timeoutDate - now).toEqual(150);
|
416
|
+
});
|
417
|
+
|
418
|
+
it("mocks the Date object and sets it to a given time", function() {
|
419
|
+
var delayedFunctionScheduler = new j$.DelayedFunctionScheduler(),
|
420
|
+
global = {Date: Date},
|
421
|
+
mockDate = new j$.MockDate(global),
|
422
|
+
clock = new j$.Clock({setTimeout: setTimeout}, delayedFunctionScheduler, mockDate),
|
423
|
+
baseTime = new Date(2013, 9, 23);
|
424
|
+
|
425
|
+
|
426
|
+
clock.install().mockDate(baseTime);
|
427
|
+
|
428
|
+
var now = new global.Date().getTime();
|
429
|
+
|
430
|
+
expect(now).toEqual(baseTime.getTime());
|
431
|
+
|
432
|
+
clock.tick(50);
|
433
|
+
|
434
|
+
expect(new global.Date().getTime()).toEqual(baseTime.getTime() + 50);
|
435
|
+
|
436
|
+
var timeoutDate = 0;
|
437
|
+
clock.setTimeout(function() {
|
438
|
+
timeoutDate = new global.Date().getTime();
|
439
|
+
}, 100);
|
440
|
+
|
441
|
+
clock.tick(100);
|
442
|
+
|
443
|
+
expect(timeoutDate).toEqual(baseTime.getTime() + 150);
|
444
|
+
});
|
359
445
|
});
|
@@ -14,7 +14,7 @@ describe("DelayedFunctionScheduler", function() {
|
|
14
14
|
|
15
15
|
it("schedules a string for later execution", function() {
|
16
16
|
var scheduler = new j$.DelayedFunctionScheduler(),
|
17
|
-
|
17
|
+
strfn = "horrible = true;";
|
18
18
|
|
19
19
|
scheduler.scheduleFunction(strfn, 0);
|
20
20
|
|
@@ -6,20 +6,20 @@ describe("Env", function() {
|
|
6
6
|
});
|
7
7
|
|
8
8
|
it('removes all spies when env is executed', function(done) {
|
9
|
-
originalFoo = function() {},
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
9
|
+
var originalFoo = function() {},
|
10
|
+
testObj = {
|
11
|
+
foo: originalFoo
|
12
|
+
},
|
13
|
+
firstSpec = jasmine.createSpy('firstSpec').and.callFake(function() {
|
14
|
+
env.spyOn(testObj, 'foo');
|
15
|
+
}),
|
16
|
+
secondSpec = jasmine.createSpy('secondSpec').and.callFake(function() {
|
17
|
+
expect(testObj.foo).toBe(originalFoo);
|
18
|
+
});
|
19
|
+
env.describe('test suite', function() {
|
20
|
+
env.it('spec 0', firstSpec);
|
21
|
+
env.it('spec 1', secondSpec);
|
22
|
+
});
|
23
23
|
|
24
24
|
var assertions = function() {
|
25
25
|
expect(firstSpec).toHaveBeenCalled();
|
@@ -35,7 +35,14 @@ describe("ExceptionFormatter", function() {
|
|
35
35
|
message = exceptionFormatter.message(sampleV8);
|
36
36
|
|
37
37
|
expect(message).toEqual('A Classic Mistake: you got your foo in my bar');
|
38
|
+
});
|
39
|
+
|
40
|
+
it("formats thrown exceptions that aren't errors", function() {
|
41
|
+
var thrown = "crazy error",
|
42
|
+
exceptionFormatter = new j$.ExceptionFormatter(),
|
43
|
+
message = exceptionFormatter.message(thrown);
|
38
44
|
|
45
|
+
expect(message).toEqual("crazy error thrown");
|
39
46
|
});
|
40
47
|
});
|
41
48
|
|
@@ -35,7 +35,7 @@ describe('Exceptions:', function() {
|
|
35
35
|
env.it('should be a passing test that runs after exceptions are thrown from a async test', secondTest);
|
36
36
|
});
|
37
37
|
|
38
|
-
expectations = function() {
|
38
|
+
var expectations = function() {
|
39
39
|
expect(secondTest).toHaveBeenCalled();
|
40
40
|
done();
|
41
41
|
};
|
@@ -55,7 +55,7 @@ describe('Exceptions:', function() {
|
|
55
55
|
});
|
56
56
|
env.describe("a suite that doesn't throw an exception", secondDescribe);
|
57
57
|
|
58
|
-
expectations = function() {
|
58
|
+
var expectations = function() {
|
59
59
|
expect(secondDescribe).toHaveBeenCalled();
|
60
60
|
done();
|
61
61
|
};
|
@@ -193,6 +193,40 @@ describe("Expectation", function() {
|
|
193
193
|
|
194
194
|
j$.Expectation.addMatchers(matchers);
|
195
195
|
|
196
|
+
expectation = new j$.Expectation({
|
197
|
+
actual: "an actual",
|
198
|
+
addExpectationResult: addExpectationResult
|
199
|
+
});
|
200
|
+
|
201
|
+
expectation.toFoo("hello");
|
202
|
+
|
203
|
+
expect(addExpectationResult).toHaveBeenCalledWith(false, {
|
204
|
+
matcherName: "toFoo",
|
205
|
+
passed: false,
|
206
|
+
expected: "hello",
|
207
|
+
actual: "an actual",
|
208
|
+
message: "I am a custom message"
|
209
|
+
});
|
210
|
+
});
|
211
|
+
|
212
|
+
it("reports a failing result with a custom fail message function to the spec when the comparison fails", function() {
|
213
|
+
var matchers = {
|
214
|
+
toFoo: function() {
|
215
|
+
return {
|
216
|
+
compare: function() {
|
217
|
+
return {
|
218
|
+
pass: false,
|
219
|
+
message: function() { return "I am a custom message"; }
|
220
|
+
};
|
221
|
+
}
|
222
|
+
};
|
223
|
+
}
|
224
|
+
},
|
225
|
+
addExpectationResult = jasmine.createSpy("addExpectationResult"),
|
226
|
+
expectation;
|
227
|
+
|
228
|
+
j$.Expectation.addMatchers(matchers);
|
229
|
+
|
196
230
|
expectation = new j$.Expectation({
|
197
231
|
matchers: matchers,
|
198
232
|
actual: "an actual",
|