forked from mattallty/Caporal.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathactions.js
128 lines (89 loc) · 2.56 KB
/
actions.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
117
118
119
120
121
122
123
124
125
126
127
128
"use strict";
/* global Program, logger, should, makeArgv, sinon */
const Promise = require('bluebird');
describe('Setting up no action()', () => {
it(`should throw NoActionError`, () => {
const program = new Program();
program
.logger(logger)
.version('1.0.0')
.command('foo', 'My foo');
const error = sinon.stub(program, "fatalError", function(err) {
should(err.name).eql('NoActionError');
});
program.parse(makeArgv('foo'));
const count = error.callCount;
error.restore();
should(count).be.eql(1);
program.reset();
});
});
describe('Setting up a sync action', () => {
it(`should call this action`, () => {
const program = new Program();
const action = sinon.spy();
program
.logger(logger)
.version('1.0.0')
.command('foo', 'My foo')
.action(action);
program.parse(makeArgv('foo'));
should(action.callCount).be.eql(1);
program.reset();
});
});
describe('Setting up a async action', () => {
it(`should succeed for a resolved promise`, () => {
const program = new Program();
const action = function() {
return Promise.resolve('foo')
};
const stub = sinon.spy(action);
program
.logger(logger)
.version('1.0.0')
.command('foo', 'My foo')
.action(stub);
program.parse(makeArgv('foo'));
should(stub.callCount).be.eql(1);
program.reset();
});
it(`should fatalError() for a rejected promise (error string)`, (done) => {
const program = new Program();
const action = function() {
return Promise.reject('Failed!')
};
const stub = sinon.spy(action);
const fatalError = sinon.stub(program, "fatalError");
program
.logger(logger)
.version('1.0.0')
.command('foo', 'My foo')
.action(stub);
program.parse(makeArgv('foo'));
setImmediate(function () {
should(stub.callCount).be.eql(1);
should(fatalError.callCount).be.eql(1);
done()
});
});
it(`should fatalError() for a rejected promise (error object)`, (done) => {
const program = new Program();
const action = function() {
return Promise.reject(new Error('Failed!'))
};
const stub = sinon.spy(action);
const fatalError = sinon.stub(program, "fatalError");
program
.logger(logger)
.version('1.0.0')
.command('foo', 'My foo')
.action(stub);
program.parse(makeArgv('foo'));
setImmediate(function () {
should(stub.callCount).be.eql(1);
should(fatalError.callCount).be.eql(1);
done()
});
});
});