forked from angular-ui/ui-router
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtestUtils.js
107 lines (94 loc) · 2.88 KB
/
testUtils.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
// Promise testing support
angular.module('ngMock').config(function ($provide) {
$provide.decorator('$q', function ($delegate, $rootScope) {
$delegate.flush = function() {
$rootScope.$digest();
};
// Add callbacks to the promise that expose the resolved value/error
function expose(promise) {
// Don't add hooks to the same promise twice (shouldn't happen anyway)
if (!promise.hasOwnProperty('$$resolved')) {
promise.$$resolved = false;
promise.then(function (value) {
promise.$$resolved = { success: true, value: value };
}, function (error) {
promise.$$resolved = { success: false, error: error };
});
// We need to expose() any then()ed promises recursively
var qThen = promise.then;
promise.then = function () {
return expose(qThen.apply(this, arguments));
};
}
return promise;
}
// Wrap functions that return a promise
angular.forEach([ 'when', 'all', 'reject'], function (name) {
var qFunc = $delegate[name];
$delegate[name] = function () {
return expose(qFunc.apply(this, arguments));
};
});
// Wrap defer()
var qDefer = $delegate.defer;
$delegate.defer = function () {
var deferred = qDefer();
expose(deferred.promise);
return deferred;
}
return $delegate;
});
});
try {
// Animation testing support
angular.module('mock.animate').config(function ($provide) {
$provide.decorator('$animate', function ($delegate) {
$delegate.flush = function() {
while (this.queue.length > 0) {
this.flushNext(this.queue[0].method);
}
};
return $delegate;
});
});
} catch (e) {}
function testablePromise(promise) {
if (!promise || !promise.then) throw new Error('Expected a promise, but got ' + jasmine.pp(promise) + '.');
if (!isDefined(promise.$$resolved)) throw new Error('Promise has not been augmented by ngMock');
return promise;
}
function resolvedPromise(promise) {
var result = testablePromise(promise).$$resolved;
if (!result) throw new Error('Promise is not resolved yet');
return result;
}
function resolvedValue(promise) {
var result = resolvedPromise(promise);
if (!result.success) throw result.error;
return result.value;
}
function resolvedError(promise) {
var result = resolvedPromise(promise);
if (result.success) throw new Error('Promise was expected to fail but returned ' + jasmin.pp(res.value) + '.');
return result.error;
}
beforeEach(function () {
this.addMatchers({
toBeResolved: function() {
return !!testablePromise(this.actual).$$resolved;
}
});
});
// Misc test utils
function caught(fn) {
try {
fn();
return null;
} catch (e) {
return e;
}
}
// Utils for test from core angular
var noop = angular.noop,
toJson = angular.toJson;
beforeEach(module('ui.router.compat'));