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
|
describe('Runner', function(){
var scenario, runner, log, Describe, It, $scenario;
function logger(text) {
return function(){log += text;};
}
beforeEach(function(){
log = '';
scenario = {};
runner = new angular.scenario.Runner(scenario);
Describe = scenario.describe;
It = scenario.it;
$scenario = scenario.$scenario;
});
describe('describe', function(){
it('should consume the describe functions', function(){
Describe('describe name', logger('body'));
expect(log).toEqual('body');
});
describe('it', function(){
it('should consume it', function(){
Describe('describe name', function(){
It('should text', logger('body'));
});
expect(log).toEqual('body');
var spec = $scenario.specs['describe name: it should text'];
expect(spec.steps).toEqual([]);
expect(spec.name).toEqual('describe name: it should text');
});
});
});
describe('steps building', function(){
it('should queue steps', function(){
function step(){};
Describe('name', function(){
It('should', function(){
$scenario.addStep('stepname', step);
});
});
expect($scenario.specs['name: it should'].steps).toEqual([{name:'stepname', fn:step}]);
});
});
describe('execution', function(){
it('should execute the queued steps', function(){
var next, firstThis, secondThis, doneThis, spec;
$scenario.specs['spec'] = {
steps: [
{name:'step1', fn: function(done) {
next = done;
log += 'first;';
firstThis = this;
}},
{name:'step2', fn:function(done){
next = done;
log += 'second;';
secondThis = this;
}}
]
};
spec = $scenario.execute('spec', function(done){
log += 'done;';
doneThis = this;
});
expect(log).toEqual('first;');
next();
expect(log).toEqual('first;second;');
next();
expect(log).toEqual('first;second;done;');
expect(spec).not.toEqual(window);
expect(spec).toEqual(firstThis);
expect(spec).toEqual(secondThis);
expect(spec).toEqual(doneThis);
expect(spec.result.failed).toEqual(false);
expect(spec.result.finished).toEqual(true);
expect(spec.result.error).toBeUndefined();
expect(spec.result.passed).toEqual(true);
});
it('should handle exceptions in a step', function(){
$scenario.specs['spec'] = {
steps: [
{name:'error', fn:function(done) {
throw "MyError";
}}
]
};
var spec = $scenario.execute('spec');
expect(spec.result.passed).toEqual(false);
expect(spec.result.failed).toEqual(true);
expect(spec.result.finished).toEqual(true);
expect(spec.result.error).toEqual("MyError");
});
});
});
|