Skip to content

Commit cfba074

Browse files
committed
tests for can-deactivate
1 parent 4dec8d6 commit cfba074

File tree

2 files changed

+175
-7
lines changed

2 files changed

+175
-7
lines changed

test/unit/specs/pipeline/can-activate.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ describe('canActivate', function () {
1111
return true
1212
}
1313
}
14-
}, function (router, calls, emitter) {
14+
}, function (router, calls) {
1515
router.go('/a')
1616
expect(router.app.$el.textContent).toBe('A ')
1717
assertCalls(calls, ['a.canActivate'])
@@ -28,7 +28,7 @@ describe('canActivate', function () {
2828
}, wait)
2929
}
3030
}
31-
}, function (router, calls, emitter) {
31+
}, function (router, calls) {
3232
router.go('/a')
3333
expect(router.app.$el.textContent).toBe('')
3434
setTimeout(function () {
@@ -46,7 +46,7 @@ describe('canActivate', function () {
4646
return false
4747
}
4848
}
49-
}, function (router, calls, canActivate) {
49+
}, function (router, calls) {
5050
router.go('/a')
5151
assertCalls(calls, ['a.canActivate'])
5252
expect(router.app.$el.textContent).toBe('')
@@ -64,7 +64,7 @@ describe('canActivate', function () {
6464
}, wait)
6565
}
6666
}
67-
}, function (router, calls, emitter) {
67+
}, function (router, calls) {
6868
router.go('/a')
6969
assertCalls(calls, ['a.canActivate'])
7070
expect(router.app.$el.textContent).toBe('')
@@ -90,7 +90,7 @@ describe('canActivate', function () {
9090
})
9191
}
9292
}
93-
}, function (router, calls, emitter) {
93+
}, function (router, calls) {
9494
router.go('/a')
9595
expect(router.app.$el.textContent).toBe('')
9696
setTimeout(function () {
@@ -112,7 +112,7 @@ describe('canActivate', function () {
112112
})
113113
}
114114
}
115-
}, function (router, calls, emitter) {
115+
}, function (router, calls) {
116116
router.go('/a')
117117
assertCalls(calls, ['a.canActivate'])
118118
expect(router.app.$el.textContent).toBe('')
@@ -136,7 +136,7 @@ describe('canActivate', function () {
136136
})
137137
}
138138
}
139-
}, function (router, calls, emitter) {
139+
}, function (router, calls) {
140140
router.go('/a')
141141
assertCalls(calls, ['a.canActivate'])
142142
expect(router.app.$el.textContent).toBe('')
Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
var testUtils = require('../util')
2+
var test = testUtils.test
3+
var assertCalls = testUtils.assertCalls
4+
5+
describe('canDeactivate', function () {
6+
7+
it('sync allow', function (done) {
8+
test({
9+
a: {
10+
canDeactivate: function () {
11+
return true
12+
}
13+
}
14+
}, function (router, calls) {
15+
router.go('/a')
16+
expect(router.app.$el.textContent).toBe('A ')
17+
router.go('/c')
18+
assertCalls(calls, ['a.canDeactivate'])
19+
expect(router.app.$el.textContent).toBe('C ')
20+
done()
21+
})
22+
})
23+
24+
it('async allow', function (done) {
25+
test({
26+
a: {
27+
canDeactivate: function (transition) {
28+
setTimeout(function () {
29+
transition.next()
30+
}, wait)
31+
}
32+
}
33+
}, function (router, calls) {
34+
router.go('/a')
35+
expect(router.app.$el.textContent).toBe('A ')
36+
router.go('/c')
37+
assertCalls(calls, ['a.canDeactivate'])
38+
expect(router.app.$el.textContent).toBe('A ')
39+
setTimeout(function () {
40+
expect(router.app.$el.textContent).toBe('C ')
41+
done()
42+
}, wait)
43+
})
44+
})
45+
46+
it('sync reject', function (done) {
47+
test({
48+
a: {
49+
canDeactivate: function (transition) {
50+
return false
51+
}
52+
}
53+
}, function (router, calls) {
54+
router.go('/a')
55+
expect(router.app.$el.textContent).toBe('A ')
56+
router.go('/c')
57+
assertCalls(calls, ['a.canDeactivate'])
58+
expect(router.app.$el.textContent).toBe('A ')
59+
done()
60+
})
61+
})
62+
63+
it('async reject', function (done) {
64+
test({
65+
a: {
66+
canDeactivate: function (transition) {
67+
setTimeout(function () {
68+
transition.abort()
69+
}, wait)
70+
}
71+
}
72+
}, function (router, calls) {
73+
router.go('/a')
74+
expect(router.app.$el.textContent).toBe('A ')
75+
router.go('/c')
76+
expect(router.app.$el.textContent).toBe('A ')
77+
// path changes during validation phase
78+
expect(router.history.currentPath).toBe('/c')
79+
setTimeout(function () {
80+
// but gets reset when validation fails
81+
assertCalls(calls, ['a.canDeactivate'])
82+
expect(router.app.$el.textContent).toBe('A ')
83+
expect(router.history.currentPath).toBe('/a')
84+
done()
85+
}, wait)
86+
})
87+
})
88+
89+
it('promise allow', function (done) {
90+
test({
91+
a: {
92+
canDeactivate: function (transition) {
93+
return new Promise(function (resolve) {
94+
setTimeout(function () {
95+
resolve(true)
96+
}, wait)
97+
})
98+
}
99+
}
100+
}, function (router, calls) {
101+
router.go('/a')
102+
expect(router.app.$el.textContent).toBe('A ')
103+
router.go('/c')
104+
expect(router.app.$el.textContent).toBe('A ')
105+
expect(router.history.currentPath).toBe('/c')
106+
setTimeout(function () {
107+
assertCalls(calls, ['a.canDeactivate'])
108+
expect(router.app.$el.textContent).toBe('C ')
109+
expect(router.history.currentPath).toBe('/c')
110+
done()
111+
}, wait)
112+
})
113+
})
114+
115+
it('promise resolve false', function (done) {
116+
test({
117+
a: {
118+
canDeactivate: function (transition) {
119+
return new Promise(function (resolve, reject) {
120+
setTimeout(function () {
121+
resolve(false)
122+
}, wait)
123+
})
124+
}
125+
}
126+
}, function (router, calls) {
127+
router.go('/a')
128+
expect(router.app.$el.textContent).toBe('A ')
129+
router.go('/c')
130+
expect(router.app.$el.textContent).toBe('A ')
131+
// path changes during validation phase
132+
expect(router.history.currentPath).toBe('/c')
133+
setTimeout(function () {
134+
// but gets reset when validation fails
135+
assertCalls(calls, ['a.canDeactivate'])
136+
expect(router.app.$el.textContent).toBe('A ')
137+
expect(router.history.currentPath).toBe('/a')
138+
done()
139+
}, wait)
140+
})
141+
})
142+
143+
it('promise reject', function (done) {
144+
test({
145+
a: {
146+
canDeactivate: function (transition) {
147+
return new Promise(function (resolve, reject) {
148+
setTimeout(reject, wait)
149+
})
150+
}
151+
}
152+
}, function (router, calls) {
153+
router.go('/a')
154+
expect(router.app.$el.textContent).toBe('A ')
155+
router.go('/c')
156+
expect(router.app.$el.textContent).toBe('A ')
157+
// path changes during validation phase
158+
expect(router.history.currentPath).toBe('/c')
159+
setTimeout(function () {
160+
// but gets reset when validation fails
161+
assertCalls(calls, ['a.canDeactivate'])
162+
expect(router.app.$el.textContent).toBe('A ')
163+
expect(router.history.currentPath).toBe('/a')
164+
done()
165+
}, wait)
166+
})
167+
})
168+
})

0 commit comments

Comments
 (0)