-
-
Notifications
You must be signed in to change notification settings - Fork 737
/
Copy pathrecorder_test.js
81 lines (71 loc) · 2.17 KB
/
recorder_test.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
const assert = require('assert');
const recorder = require('../../lib/recorder');
describe('Recorder', () => {
beforeEach(() => recorder.start());
it('should create a promise', () => {
recorder.promise().should.be.instanceof(Promise);
});
it('should execute error handler on error', (done) => {
recorder.errHandler(() => done());
recorder.throw(new Error('err'));
recorder.catch();
});
describe('#session', () => {
it('can be started saving previous promise chain', () => {
let order = '';
recorder.add(() => order += 'a');
recorder.add(() => {
recorder.session.start();
recorder.add(() => order += 'c');
recorder.add(() => order += 'd');
});
recorder.add(() => recorder.session.restore());
recorder.add(() => order += 'b');
return recorder.promise()
.then(() => assert.equal(order, 'acdb'));
});
});
describe('#add', () => {
it('should add steps to promise', () => {
let counter = 0;
recorder.add(() => counter++);
recorder.add(() => counter++);
recorder.add(() => counter.should.eql(2));
return recorder.promise();
});
it('should not add steps when stopped', () => {
let counter = 0;
recorder.add(() => counter++);
recorder.stop();
recorder.add(() => counter++);
return recorder.promise()
.then(() => counter.should.eql(1));
});
});
describe('#retry', () => {
it('should retry failed steps when asked', () => {
let counter = 0;
recorder.retry(2);
recorder.add(() => {
counter++;
if (counter < 3) {
throw new Error('ups');
}
});
return recorder.promise();
});
it('should create a chain of retries', () => {
let counter = 0;
const errorText = 'noerror';
recorder.retry({ retries: 2, when: (err) => { return err.message === errorText; } });
recorder.retry({ retries: 2, when: (err) => { return err.message === 'othererror'; } });
recorder.add(() => {
counter++;
if (counter < 3) {
throw new Error(errorText);
}
});
return recorder.promise();
});
});
});