-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest.js
98 lines (87 loc) · 3 KB
/
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/* jshint expr: true */
var mulligan = require('./index')
var should = require('should')
var sinon = require('sinon')
describe('The mulligan function', function () {
it('should call `resolve` with `val` when resolved', function () {
var val = 47
var resolver = sinon.stub().callsArgWith(0, val)
var resolve = sinon.spy()
var reject = sinon.spy()
mulligan(1, 0, resolver)(resolve, reject)
resolve.called.should.be.true
reject.called.should.be.false
resolve.calledWith(val).should.be.true
})
it('should call `reject` with `err` when rejected', function () {
var err = new Error('Oh snap!')
var resolver = sinon.stub().callsArgWith(1, err)
var resolve = sinon.spy()
var reject = sinon.spy()
mulligan(1, 0, resolver)(resolve, reject)
resolve.called.should.be.false
reject.called.should.be.true
reject.calledWith(err).should.be.true
})
it('should call `resolver` up to `count` number of times', function (done) {
var count = 5
var err = new Error('Oh snap!')
var resolver = sinon.stub().callsArgWith(1, err)
mulligan(count, 1, resolver)(null, function (actualErr) {
resolver.callCount.should.equal(count)
actualErr.should.equal(err)
done()
})
})
it('should call `resolver` once if resolved first time', function (done) {
var val = 47
var resolver = sinon.stub().callsArgWith(0, val)
mulligan(5, 1, resolver)(function (actualVal) {
resolver.callCount.should.equal(1)
actualVal.should.equal(val)
done()
})
})
it('should retry `resolver`after `wait` seconds', function () {
var clock = sinon.useFakeTimers()
var err = new Error('Oh snap!')
var resolver = sinon.stub().callsArgWith(1, err)
var wait = 2
mulligan(2, wait, resolver)(null, function() {})
clock.tick(wait - 1)
resolver.callCount.should.equal(1)
clock.tick(1)
resolver.callCount.should.equal(2)
clock.restore()
})
it('should reject without retry if `cond` returns `false`', function (done) {
var err = new Error('Oh snap!')
var resolver = sinon.stub().callsArgWith(1, err)
var cond = function() { return false }
mulligan(2, 1, resolver, cond)(null, function (actualErr) {
resolver.callCount.should.equal(1)
done()
})
})
it('should retry if `cond` returns `true`', function (done) {
var err = new Error('Oh snap!')
var count = 2
var resolver = sinon.stub().callsArgWith(1, err)
var cond = function() { return true }
mulligan(count, 1, resolver, cond)(null, function (actualErr) {
resolver.callCount.should.equal(count)
done()
})
})
it('should call `cond` with the `err` for each rejection', function (done) {
var err = new Error('Oh snap!')
var count = 2
var resolver = sinon.stub().callsArgWith(1, err)
var cond = sinon.stub().returns(true)
mulligan(count, 1, resolver, cond)(null, function (actualErr) {
resolver.callCount.should.equal(count)
cond.alwaysCalledWith(err)
done()
})
})
})