jasmine-core 2.1.3 → 2.2.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/console/console.js +1 -1
- data/lib/jasmine-core/boot.js +3 -2
- data/lib/jasmine-core/boot/boot.js +2 -1
- data/lib/jasmine-core/example/node_example/{src → lib/jasmine_examples}/Player.js +0 -0
- data/lib/jasmine-core/example/node_example/{src → lib/jasmine_examples}/Song.js +0 -0
- data/lib/jasmine-core/example/node_example/spec/{SpecHelper.js → helpers/jasmine_examples/SpecHelper.js} +0 -0
- data/lib/jasmine-core/example/node_example/spec/{PlayerSpec.js → jasmine_examples/PlayerSpec.js} +2 -2
- data/lib/jasmine-core/jasmine-html.js +17 -5
- data/lib/jasmine-core/jasmine.css +10 -10
- data/lib/jasmine-core/jasmine.js +295 -155
- data/lib/jasmine-core/node_boot.js +1 -1
- data/lib/jasmine-core/spec/core/DelayedFunctionSchedulerSpec.js +37 -0
- data/lib/jasmine-core/spec/core/EnvSpec.js +6 -0
- data/lib/jasmine-core/spec/core/PrettyPrintSpec.js +14 -14
- data/lib/jasmine-core/spec/core/SpecSpec.js +24 -1
- data/lib/jasmine-core/spec/core/SpyRegistrySpec.js +9 -0
- data/lib/jasmine-core/spec/core/SpySpec.js +9 -1
- data/lib/jasmine-core/spec/core/SuiteSpec.js +26 -0
- data/lib/jasmine-core/spec/core/{AnySpec.js → asymmetric_equality/AnySpec.js} +6 -6
- data/lib/jasmine-core/spec/core/asymmetric_equality/AnythingSpec.js +44 -0
- data/lib/jasmine-core/spec/core/asymmetric_equality/ArrayContainingSpec.js +39 -0
- data/lib/jasmine-core/spec/core/asymmetric_equality/ObjectContainingSpec.js +58 -0
- data/lib/jasmine-core/spec/core/asymmetric_equality/StringMatchingSpec.js +27 -0
- data/lib/jasmine-core/spec/core/integration/EnvSpec.js +79 -3
- data/lib/jasmine-core/spec/core/integration/SpecRunningSpec.js +26 -2
- data/lib/jasmine-core/spec/core/matchers/matchersUtilSpec.js +112 -2
- data/lib/jasmine-core/spec/core/matchers/toMatchSpec.js +8 -0
- data/lib/jasmine-core/spec/html/HtmlReporterSpec.js +19 -8
- data/lib/jasmine-core/spec/html/PrettyPrintHtmlSpec.js +1 -1
- data/lib/jasmine-core/spec/html/QueryStringSpec.js +32 -3
- data/lib/jasmine-core/version.rb +1 -1
- metadata +96 -93
- data/lib/jasmine-core/spec/core/ObjectContainingSpec.js +0 -70
@@ -255,5 +255,42 @@ describe("DelayedFunctionScheduler", function() {
|
|
255
255
|
scheduler.tick(10);
|
256
256
|
});
|
257
257
|
|
258
|
+
it("removes functions during a tick that runs the function", function() {
|
259
|
+
var scheduler = new j$.DelayedFunctionScheduler(),
|
260
|
+
fn = jasmine.createSpy('fn'),
|
261
|
+
fnDelay = 10,
|
262
|
+
timeoutKey;
|
263
|
+
|
264
|
+
timeoutKey = scheduler.scheduleFunction(fn, fnDelay, [], true);
|
265
|
+
scheduler.scheduleFunction(function () {
|
266
|
+
scheduler.removeFunctionWithId(timeoutKey);
|
267
|
+
}, 2 * fnDelay);
|
268
|
+
|
269
|
+
expect(fn).not.toHaveBeenCalled();
|
270
|
+
|
271
|
+
scheduler.tick(3 * fnDelay);
|
272
|
+
|
273
|
+
expect(fn).toHaveBeenCalled();
|
274
|
+
expect(fn.calls.count()).toBe(2);
|
275
|
+
});
|
276
|
+
|
277
|
+
it("removes functions during the first tick that runs the function", function() {
|
278
|
+
var scheduler = new j$.DelayedFunctionScheduler(),
|
279
|
+
fn = jasmine.createSpy('fn'),
|
280
|
+
fnDelay = 10,
|
281
|
+
timeoutKey;
|
282
|
+
|
283
|
+
timeoutKey = scheduler.scheduleFunction(fn, fnDelay, [], true);
|
284
|
+
scheduler.scheduleFunction(function () {
|
285
|
+
scheduler.removeFunctionWithId(timeoutKey);
|
286
|
+
}, fnDelay);
|
287
|
+
|
288
|
+
expect(fn).not.toHaveBeenCalled();
|
289
|
+
|
290
|
+
scheduler.tick(3 * fnDelay);
|
291
|
+
|
292
|
+
expect(fn).toHaveBeenCalled();
|
293
|
+
expect(fn.calls.count()).toBe(1);
|
294
|
+
});
|
258
295
|
});
|
259
296
|
|
@@ -11,6 +11,12 @@ describe("Env", function() {
|
|
11
11
|
env.pending();
|
12
12
|
}).toThrow(j$.Spec.pendingSpecExceptionMessage);
|
13
13
|
});
|
14
|
+
|
15
|
+
it("throws the Pending Spec exception with a custom message", function() {
|
16
|
+
expect(function() {
|
17
|
+
env.pending('custom message');
|
18
|
+
}).toThrow(j$.Spec.pendingSpecExceptionMessage + 'custom message');
|
19
|
+
});
|
14
20
|
});
|
15
21
|
|
16
22
|
describe("#topSuite", function() {
|
@@ -16,7 +16,7 @@ describe("j$.pp", function () {
|
|
16
16
|
|
17
17
|
it("should stringify arrays properly", function() {
|
18
18
|
expect(j$.pp([1, 2])).toEqual("[ 1, 2 ]");
|
19
|
-
expect(j$.pp([1, 'foo', {}, jasmine.undefined, null])).toEqual("[ 1, 'foo', { }, undefined, null ]");
|
19
|
+
expect(j$.pp([1, 'foo', {}, jasmine.undefined, null])).toEqual("[ 1, 'foo', Object({ }), undefined, null ]");
|
20
20
|
});
|
21
21
|
|
22
22
|
it("should indicate circular array references", function() {
|
@@ -32,18 +32,18 @@ describe("j$.pp", function () {
|
|
32
32
|
});
|
33
33
|
|
34
34
|
it("should stringify objects properly", function() {
|
35
|
-
expect(j$.pp({foo: 'bar'})).toEqual("{ foo: 'bar' }");
|
36
|
-
expect(j$.pp({foo:'bar', baz:3, nullValue: null, undefinedValue: jasmine.undefined})).toEqual("{ foo: 'bar', baz: 3, nullValue: null, undefinedValue: undefined }");
|
35
|
+
expect(j$.pp({foo: 'bar'})).toEqual("Object({ foo: 'bar' })");
|
36
|
+
expect(j$.pp({foo:'bar', baz:3, nullValue: null, undefinedValue: jasmine.undefined})).toEqual("Object({ foo: 'bar', baz: 3, nullValue: null, undefinedValue: undefined })");
|
37
37
|
expect(j$.pp({foo: function () {
|
38
|
-
}, bar: [1, 2, 3]})).toEqual("{ foo: Function, bar: [ 1, 2, 3 ] }");
|
38
|
+
}, bar: [1, 2, 3]})).toEqual("Object({ foo: Function, bar: [ 1, 2, 3 ] })");
|
39
39
|
});
|
40
40
|
|
41
41
|
it("should not include inherited properties when stringifying an object", function() {
|
42
|
-
var SomeClass = function() {};
|
42
|
+
var SomeClass = function SomeClass() {};
|
43
43
|
SomeClass.prototype.foo = "inherited foo";
|
44
44
|
var instance = new SomeClass();
|
45
45
|
instance.bar = "my own bar";
|
46
|
-
expect(j$.pp(instance)).toEqual("{ bar: 'my own bar' }");
|
46
|
+
expect(j$.pp(instance)).toEqual("SomeClass({ bar: 'my own bar' })");
|
47
47
|
});
|
48
48
|
|
49
49
|
it("should not recurse objects and arrays more deeply than j$.MAX_PRETTY_PRINT_DEPTH", function() {
|
@@ -53,15 +53,15 @@ describe("j$.pp", function () {
|
|
53
53
|
|
54
54
|
try {
|
55
55
|
j$.MAX_PRETTY_PRINT_DEPTH = 2;
|
56
|
-
expect(j$.pp(nestedObject)).toEqual("{ level1: { level2: Object } }");
|
56
|
+
expect(j$.pp(nestedObject)).toEqual("Object({ level1: Object({ level2: Object }) })");
|
57
57
|
expect(j$.pp(nestedArray)).toEqual("[ 1, [ 2, Array ] ]");
|
58
58
|
|
59
59
|
j$.MAX_PRETTY_PRINT_DEPTH = 3;
|
60
|
-
expect(j$.pp(nestedObject)).toEqual("{ level1: { level2: { level3: Object } } }");
|
60
|
+
expect(j$.pp(nestedObject)).toEqual("Object({ level1: Object({ level2: Object({ level3: Object }) }) })");
|
61
61
|
expect(j$.pp(nestedArray)).toEqual("[ 1, [ 2, [ 3, Array ] ] ]");
|
62
62
|
|
63
63
|
j$.MAX_PRETTY_PRINT_DEPTH = 4;
|
64
|
-
expect(j$.pp(nestedObject)).toEqual("{ level1: { level2: { level3: { level4: 'leaf' } } } }");
|
64
|
+
expect(j$.pp(nestedObject)).toEqual("Object({ level1: Object({ level2: Object({ level3: Object({ level4: 'leaf' }) }) }) })");
|
65
65
|
expect(j$.pp(nestedArray)).toEqual("[ 1, [ 2, [ 3, [ 4, 'leaf' ] ] ] ]");
|
66
66
|
} finally {
|
67
67
|
j$.MAX_PRETTY_PRINT_DEPTH = originalMaxDepth;
|
@@ -73,7 +73,7 @@ describe("j$.pp", function () {
|
|
73
73
|
var frozenObject = {foo: {bar: 'baz'}};
|
74
74
|
frozenObject.circular = frozenObject;
|
75
75
|
frozenObject = Object.freeze(frozenObject);
|
76
|
-
expect(j$.pp(frozenObject)).toEqual("{ foo: { bar: 'baz' }, circular: <circular reference: Object> }");
|
76
|
+
expect(j$.pp(frozenObject)).toEqual("Object({ foo: Object({ bar: 'baz' }), circular: <circular reference: Object> })");
|
77
77
|
}
|
78
78
|
});
|
79
79
|
|
@@ -96,7 +96,7 @@ describe("j$.pp", function () {
|
|
96
96
|
it("should indicate circular object references", function() {
|
97
97
|
var sampleValue = {foo: 'hello'};
|
98
98
|
sampleValue.nested = sampleValue;
|
99
|
-
expect(j$.pp(sampleValue)).toEqual("{ foo: 'hello', nested: <circular reference: Object> }");
|
99
|
+
expect(j$.pp(sampleValue)).toEqual("Object({ foo: 'hello', nested: <circular reference: Object> })");
|
100
100
|
});
|
101
101
|
|
102
102
|
it("should indicate getters on objects as such", function() {
|
@@ -108,10 +108,10 @@ describe("j$.pp", function () {
|
|
108
108
|
});
|
109
109
|
}
|
110
110
|
if (sampleValue.__defineGetter__) {
|
111
|
-
expect(j$.pp(sampleValue)).toEqual("{ id: 1, calculatedValue: <getter> }");
|
111
|
+
expect(j$.pp(sampleValue)).toEqual("Object({ id: 1, calculatedValue: <getter> })");
|
112
112
|
}
|
113
113
|
else {
|
114
|
-
expect(j$.pp(sampleValue)).toEqual("{ id: 1 }");
|
114
|
+
expect(j$.pp(sampleValue)).toEqual("Object({ id: 1 })");
|
115
115
|
}
|
116
116
|
});
|
117
117
|
|
@@ -157,6 +157,6 @@ describe("j$.pp", function () {
|
|
157
157
|
var obj = Object.create(null);
|
158
158
|
obj.foo = 'bar';
|
159
159
|
|
160
|
-
expect(j$.pp(obj)).toEqual("{ foo: 'bar' }");
|
160
|
+
expect(j$.pp(obj)).toEqual("null({ foo: 'bar' })");
|
161
161
|
});
|
162
162
|
});
|
@@ -14,6 +14,10 @@ describe("Spec", function() {
|
|
14
14
|
expect(j$.Spec.isPendingSpecException(fakeError)).toBe(true);
|
15
15
|
});
|
16
16
|
|
17
|
+
it("#isPendingSpecException returns true for a pending spec exception with a custom message", function() {
|
18
|
+
expect(j$.Spec.isPendingSpecException(j$.Spec.pendingSpecExceptionMessage + 'foo')).toBe(true);
|
19
|
+
});
|
20
|
+
|
17
21
|
it("#isPendingSpecException returns false for not a pending spec exception", function() {
|
18
22
|
var e = new Error("foo");
|
19
23
|
|
@@ -174,7 +178,8 @@ describe("Spec", function() {
|
|
174
178
|
description: 'with a spec',
|
175
179
|
fullName: 'a suite with a spec',
|
176
180
|
failedExpectations: [],
|
177
|
-
passedExpectations: []
|
181
|
+
passedExpectations: [],
|
182
|
+
pendingReason: ''
|
178
183
|
});
|
179
184
|
});
|
180
185
|
|
@@ -254,6 +259,24 @@ describe("Spec", function() {
|
|
254
259
|
spec.execute();
|
255
260
|
|
256
261
|
expect(spec.status()).toEqual("pending");
|
262
|
+
expect(spec.result.pendingReason).toEqual('');
|
263
|
+
});
|
264
|
+
|
265
|
+
it("should set the pendingReason", function() {
|
266
|
+
var fakeQueueRunner = function(opts) {
|
267
|
+
opts.onException(new Error(j$.Spec.pendingSpecExceptionMessage + 'custom message'));
|
268
|
+
},
|
269
|
+
spec = new j$.Spec({
|
270
|
+
description: 'my test',
|
271
|
+
id: 'some-id',
|
272
|
+
queueableFn: { fn: function() { } },
|
273
|
+
queueRunnerFactory: fakeQueueRunner
|
274
|
+
});
|
275
|
+
|
276
|
+
spec.execute();
|
277
|
+
|
278
|
+
expect(spec.status()).toEqual("pending");
|
279
|
+
expect(spec.result.pendingReason).toEqual('custom message');
|
257
280
|
});
|
258
281
|
});
|
259
282
|
});
|
@@ -7,6 +7,15 @@ describe("SpyRegistry", function() {
|
|
7
7
|
}).toThrowError(/could not find an object/);
|
8
8
|
});
|
9
9
|
|
10
|
+
it("checks that a method name was passed", function() {
|
11
|
+
var spyRegistry = new j$.SpyRegistry(),
|
12
|
+
subject = {};
|
13
|
+
|
14
|
+
expect(function() {
|
15
|
+
spyRegistry.spyOn(subject);
|
16
|
+
}).toThrowError(/No method name supplied/);
|
17
|
+
});
|
18
|
+
|
10
19
|
it("checks for the existence of the method", function() {
|
11
20
|
var spyRegistry = new j$.SpyRegistry(),
|
12
21
|
subject = {};
|
@@ -7,7 +7,7 @@ describe('Spies', function () {
|
|
7
7
|
TestClass.prototype.someFunction = function() {};
|
8
8
|
TestClass.prototype.someFunction.bob = "test";
|
9
9
|
});
|
10
|
-
|
10
|
+
|
11
11
|
it("preserves the properties of the spied function", function() {
|
12
12
|
var spy = j$.createSpy(TestClass.prototype, TestClass.prototype.someFunction);
|
13
13
|
|
@@ -68,6 +68,14 @@ describe('Spies', function () {
|
|
68
68
|
expect(spyObj.method2.and.identity()).toEqual('BaseName.method2');
|
69
69
|
});
|
70
70
|
|
71
|
+
it("should allow you to omit the baseName", function() {
|
72
|
+
var spyObj = j$.createSpyObj(['method1', 'method2']);
|
73
|
+
|
74
|
+
expect(spyObj).toEqual({ method1: jasmine.any(Function), method2: jasmine.any(Function)});
|
75
|
+
expect(spyObj.method1.and.identity()).toEqual('unknown.method1');
|
76
|
+
expect(spyObj.method2.and.identity()).toEqual('unknown.method2');
|
77
|
+
});
|
78
|
+
|
71
79
|
it("should throw if you do not pass an array argument", function() {
|
72
80
|
expect(function() {
|
73
81
|
j$.createSpyObj('BaseName');
|
@@ -117,6 +117,32 @@ describe("Suite", function() {
|
|
117
117
|
expect(lastAfter).toHaveBeenCalled();
|
118
118
|
});
|
119
119
|
|
120
|
+
it("does not run *All functions if runnables are explicitly set", function(){
|
121
|
+
var env = new j$.Env(),
|
122
|
+
fakeQueueRunner = jasmine.createSpy('fake queue runner'),
|
123
|
+
suite = new j$.Suite({
|
124
|
+
env: env,
|
125
|
+
description: "I am a suite",
|
126
|
+
queueRunner: fakeQueueRunner,
|
127
|
+
runnablesExplictlySetGetter: function(){return true;}
|
128
|
+
}),
|
129
|
+
beforeAll = jasmine.createSpy('beforeAll'),
|
130
|
+
afterAll = jasmine.createSpy('afterAll'),
|
131
|
+
fakeIt = {execute: jasmine.createSpy('it'), isExecutable: function() { return true; } };
|
132
|
+
|
133
|
+
suite.beforeAll(beforeAll);
|
134
|
+
suite.afterAll(afterAll);
|
135
|
+
suite.addChild(fakeIt);
|
136
|
+
|
137
|
+
suite.execute();
|
138
|
+
var suiteFns = fakeQueueRunner.calls.mostRecent().args[0].queueableFns;
|
139
|
+
|
140
|
+
expect(suite.isExecutable()).toBeFalsy();
|
141
|
+
expect(suiteFns.length).toEqual(1);
|
142
|
+
expect(beforeAll).not.toHaveBeenCalled();
|
143
|
+
expect(afterAll).not.toHaveBeenCalled();
|
144
|
+
});
|
145
|
+
|
120
146
|
it("can be disabled, but still calls callbacks", function() {
|
121
147
|
var env = new j$.Env(),
|
122
148
|
fakeQueueRunner = jasmine.createSpy('fake queue runner'),
|
@@ -2,38 +2,38 @@ describe("Any", function() {
|
|
2
2
|
it("matches a string", function() {
|
3
3
|
var any = new j$.Any(String);
|
4
4
|
|
5
|
-
expect(any.
|
5
|
+
expect(any.asymmetricMatch("foo")).toBe(true);
|
6
6
|
});
|
7
7
|
|
8
8
|
it("matches a number", function() {
|
9
9
|
var any = new j$.Any(Number);
|
10
10
|
|
11
|
-
expect(any.
|
11
|
+
expect(any.asymmetricMatch(1)).toBe(true);
|
12
12
|
});
|
13
13
|
|
14
14
|
it("matches a function", function() {
|
15
15
|
var any = new j$.Any(Function);
|
16
16
|
|
17
|
-
expect(any.
|
17
|
+
expect(any.asymmetricMatch(function(){})).toBe(true);
|
18
18
|
});
|
19
19
|
|
20
20
|
it("matches an Object", function() {
|
21
21
|
var any = new j$.Any(Object);
|
22
22
|
|
23
|
-
expect(any.
|
23
|
+
expect(any.asymmetricMatch({})).toBe(true);
|
24
24
|
});
|
25
25
|
|
26
26
|
it("matches a Boolean", function() {
|
27
27
|
var any = new j$.Any(Boolean);
|
28
28
|
|
29
|
-
expect(any.
|
29
|
+
expect(any.asymmetricMatch(true)).toBe(true);
|
30
30
|
});
|
31
31
|
|
32
32
|
it("matches another constructed object", function() {
|
33
33
|
var Thing = function() {},
|
34
34
|
any = new j$.Any(Thing);
|
35
35
|
|
36
|
-
expect(any.
|
36
|
+
expect(any.asymmetricMatch(new Thing())).toBe(true);
|
37
37
|
});
|
38
38
|
|
39
39
|
it("jasmineToString's itself", function() {
|
@@ -0,0 +1,44 @@
|
|
1
|
+
describe("Anything", function() {
|
2
|
+
it("matches a string", function() {
|
3
|
+
var anything = new j$.Anything();
|
4
|
+
|
5
|
+
expect(anything.asymmetricMatch('foo')).toBe(true);
|
6
|
+
});
|
7
|
+
|
8
|
+
it("matches a number", function() {
|
9
|
+
var anything = new j$.Anything();
|
10
|
+
|
11
|
+
expect(anything.asymmetricMatch(42)).toBe(true);
|
12
|
+
});
|
13
|
+
|
14
|
+
it("matches an object", function() {
|
15
|
+
var anything = new j$.Anything();
|
16
|
+
|
17
|
+
expect(anything.asymmetricMatch({ foo: 'bar' })).toBe(true);
|
18
|
+
});
|
19
|
+
|
20
|
+
it("matches an array", function() {
|
21
|
+
var anything = new j$.Anything();
|
22
|
+
|
23
|
+
expect(anything.asymmetricMatch([1,2,3])).toBe(true);
|
24
|
+
});
|
25
|
+
|
26
|
+
it("doesn't match undefined", function() {
|
27
|
+
var anything = new j$.Anything();
|
28
|
+
|
29
|
+
expect(anything.asymmetricMatch()).toBe(false);
|
30
|
+
expect(anything.asymmetricMatch(undefined)).toBe(false);
|
31
|
+
});
|
32
|
+
|
33
|
+
it("doesn't match null", function() {
|
34
|
+
var anything = new j$.Anything();
|
35
|
+
|
36
|
+
expect(anything.asymmetricMatch(null)).toBe(false);
|
37
|
+
});
|
38
|
+
|
39
|
+
it("jasmineToString's itself", function() {
|
40
|
+
var anything = new j$.Anything();
|
41
|
+
|
42
|
+
expect(anything.jasmineToString()).toEqual("<jasmine.anything>");
|
43
|
+
});
|
44
|
+
});
|
@@ -0,0 +1,39 @@
|
|
1
|
+
describe("ArrayContaining", function() {
|
2
|
+
it("matches any actual to an empty array", function() {
|
3
|
+
var containing = new j$.ArrayContaining([]);
|
4
|
+
|
5
|
+
expect(containing.asymmetricMatch("foo")).toBe(true);
|
6
|
+
});
|
7
|
+
|
8
|
+
it("does not work when not passed an array", function() {
|
9
|
+
var containing = new j$.ArrayContaining("foo");
|
10
|
+
|
11
|
+
expect(function() {
|
12
|
+
containing.asymmetricMatch([]);
|
13
|
+
}).toThrowError(/not 'foo'/);
|
14
|
+
});
|
15
|
+
|
16
|
+
it("matches when the item is in the actual", function() {
|
17
|
+
var containing = new j$.ArrayContaining(["foo"]);
|
18
|
+
|
19
|
+
expect(containing.asymmetricMatch(["foo"])).toBe(true);
|
20
|
+
});
|
21
|
+
|
22
|
+
it("matches when additional items are in the actual", function() {
|
23
|
+
var containing = new j$.ArrayContaining(["foo"]);
|
24
|
+
|
25
|
+
expect(containing.asymmetricMatch(["foo", "bar"])).toBe(true);
|
26
|
+
});
|
27
|
+
|
28
|
+
it("does not match when the item is not in the actual", function() {
|
29
|
+
var containing = new j$.ArrayContaining(["foo"]);
|
30
|
+
|
31
|
+
expect(containing.asymmetricMatch(["bar"])).toBe(false);
|
32
|
+
});
|
33
|
+
|
34
|
+
it("jasmineToStrings itself", function() {
|
35
|
+
var containing = new j$.ArrayContaining([]);
|
36
|
+
|
37
|
+
expect(containing.jasmineToString()).toMatch("<jasmine.arrayContaining");
|
38
|
+
});
|
39
|
+
});
|
@@ -0,0 +1,58 @@
|
|
1
|
+
describe("ObjectContaining", function() {
|
2
|
+
|
3
|
+
it("matches any actual to an empty object", function() {
|
4
|
+
var containing = new j$.ObjectContaining({});
|
5
|
+
|
6
|
+
expect(containing.asymmetricMatch("foo")).toBe(true);
|
7
|
+
});
|
8
|
+
|
9
|
+
it("does not match an empty object actual", function() {
|
10
|
+
var containing = new j$.ObjectContaining("foo");
|
11
|
+
|
12
|
+
expect(function() {
|
13
|
+
containing.asymmetricMatch({})
|
14
|
+
}).toThrowError(/not 'foo'/)
|
15
|
+
});
|
16
|
+
|
17
|
+
it("matches when the key/value pair is present in the actual", function() {
|
18
|
+
var containing = new j$.ObjectContaining({foo: "fooVal"});
|
19
|
+
|
20
|
+
expect(containing.asymmetricMatch({foo: "fooVal", bar: "barVal"})).toBe(true);
|
21
|
+
});
|
22
|
+
|
23
|
+
it("does not match when the key/value pair is not present in the actual", function() {
|
24
|
+
var containing = new j$.ObjectContaining({foo: "fooVal"});
|
25
|
+
|
26
|
+
expect(containing.asymmetricMatch({bar: "barVal", quux: "quuxVal"})).toBe(false);
|
27
|
+
});
|
28
|
+
|
29
|
+
it("does not match when the key is present but the value is different in the actual", function() {
|
30
|
+
var containing = new j$.ObjectContaining({foo: "other"});
|
31
|
+
|
32
|
+
expect(containing.asymmetricMatch({foo: "fooVal", bar: "barVal"})).toBe(false);
|
33
|
+
});
|
34
|
+
|
35
|
+
it("jasmineToString's itself", function() {
|
36
|
+
var containing = new j$.ObjectContaining({});
|
37
|
+
|
38
|
+
expect(containing.jasmineToString()).toMatch("<jasmine.objectContaining");
|
39
|
+
});
|
40
|
+
|
41
|
+
it("matches recursively", function() {
|
42
|
+
var containing = new j$.ObjectContaining({one: new j$.ObjectContaining({two: {}})});
|
43
|
+
|
44
|
+
expect(containing.asymmetricMatch({one: {two: {}}})).toBe(true);
|
45
|
+
});
|
46
|
+
|
47
|
+
it("matches when key is present with undefined value", function() {
|
48
|
+
var containing = new j$.ObjectContaining({ one: undefined });
|
49
|
+
|
50
|
+
expect(containing.asymmetricMatch({ one: undefined })).toBe(true);
|
51
|
+
});
|
52
|
+
|
53
|
+
it("does not match when key with undefined value is not present", function() {
|
54
|
+
var containing = new j$.ObjectContaining({ one: undefined });
|
55
|
+
|
56
|
+
expect(containing.asymmetricMatch({})).toBe(false);
|
57
|
+
});
|
58
|
+
});
|