forked from angular/angular.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
RunnerSpec.js
116 lines (107 loc) · 3.45 KB
/
RunnerSpec.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
108
109
110
111
112
113
114
115
116
'use strict';
/**
* Mock spec runner.
*/
function MockSpecRunner() {}
MockSpecRunner.prototype.run = function(spec, specDone) {
spec.before.call(this);
spec.body.call(this);
spec.after.call(this);
specDone();
};
MockSpecRunner.prototype.addFuture = function(name, fn, line) {
return {name: name, fn: fn, line: line};
};
describe('angular.scenario.Runner', function() {
var $window;
var runner;
beforeEach(function() {
// Trick to get the scope out of a DSL statement
angular.scenario.dsl('dslAddFuture', function() {
return function() {
return this.addFuture('future name', angular.noop);
};
});
// Trick to get the scope out of a DSL statement
angular.scenario.dsl('dslScope', function() {
var scope = this;
return function() { return scope; };
});
// Trick to get the scope out of a DSL statement
angular.scenario.dsl('dslChain', function() {
return function() {
this.chained = 0;
this.chain = function() { this.chained++; return this; };
return this;
};
});
$window = {
location: {}
};
runner = new angular.scenario.Runner($window);
runner.on('SpecError', angular.mock.rethrow);
runner.on('StepError', angular.mock.rethrow);
});
afterEach(function() {
delete angular.scenario.dsl.dslScope;
delete angular.scenario.dsl.dslChain;
});
it('should publish the functions in the public API', function() {
angular.forEach(runner.api, function(fn, name) {
var func;
if (name in $window) {
func = $window[name];
}
expect(angular.isFunction(func)).toBeTruthy();
});
});
it('should construct valid describe trees with public API', function() {
var before = [];
var after = [];
$window.describe('A', function() {
$window.beforeEach(function() { before.push('A'); });
$window.afterEach(function() { after.push('A'); });
$window.it('1', angular.noop);
$window.describe('B', function() {
$window.beforeEach(function() { before.push('B'); });
$window.afterEach(function() { after.push('B'); });
$window.it('2', angular.noop);
$window.describe('C', function() {
$window.beforeEach(function() { before.push('C'); });
$window.afterEach(function() { after.push('C'); });
$window.it('3', angular.noop);
});
});
});
var specs = runner.rootDescribe.getSpecs();
specs[0].before();
specs[0].body();
specs[0].after();
expect(before).toEqual(['A', 'B', 'C']);
expect(after).toEqual(['C', 'B', 'A']);
expect(specs[2].definition.parent).toEqual(runner.rootDescribe);
expect(specs[0].definition.parent).toEqual(specs[2].definition.children[0]);
});
it('should publish the DSL statements to the $window', function() {
$window.describe('describe', function() {
$window.it('1', function() {
expect($window.dslScope).toBeDefined();
});
});
runner.run(null/*application*/);
});
it('should create a new scope for each DSL chain', function() {
$window.describe('describe', function() {
$window.it('1', function() {
var scope = $window.dslScope();
scope.test = "foo";
expect($window.dslScope().test).toBeUndefined();
});
$window.it('2', function() {
var scope = $window.dslChain().chain().chain();
expect(scope.chained).toEqual(2);
});
});
runner.run(null/*application*/);
});
});