@@ -10,6 +10,8 @@ function isShow(elm) {
10
10
describe ( 'InfiniteLoading.vue' , ( ) => {
11
11
let vm ;
12
12
13
+ Vue . transition ( 'bounce' , { type : 'transition' , afterEnter ( ) { } } ) ;
14
+
13
15
// create new Vue instance for every test case
14
16
beforeEach ( ( ) => {
15
17
vm = new Vue ( {
@@ -57,11 +59,11 @@ describe('InfiniteLoading.vue', () => {
57
59
58
60
it ( 'should execute callback and display a spinner immediately after initialize' , ( done ) => {
59
61
vm . onInfinite = function test ( ) {
60
- Vue . nextTick ( ( ) => {
62
+ this . $ nextTick( ( ) => {
61
63
expect ( isShow ( vm . $el . querySelector ( '.loading-default' ) ) ) . to . be . true ;
62
64
done ( ) ;
63
65
} ) ;
64
- } ;
66
+ } . bind ( vm ) ;
65
67
66
68
vm . $mount ( ) . $appendTo ( 'body' ) ;
67
69
} ) ;
@@ -73,7 +75,7 @@ describe('InfiniteLoading.vue', () => {
73
75
this . list . push ( i ) ;
74
76
}
75
77
76
- Vue . nextTick ( ( ) => {
78
+ this . $ nextTick( ( ) => {
77
79
if ( this . list . length === 20 ) {
78
80
vm . $el . addEventListener ( 'scroll' , ( ) => {
79
81
expect ( this . list ) . to . have . lengthOf ( 20 ) ;
@@ -92,7 +94,7 @@ describe('InfiniteLoading.vue', () => {
92
94
it ( 'should be destroyed completely by v-if' , ( done ) => {
93
95
vm . onInfinite = function test ( ) {
94
96
this . isLoadedAll = true ;
95
- Vue . nextTick ( ( ) => {
97
+ this . $ nextTick( ( ) => {
96
98
expect ( vm . $el . querySelector ( '.loading-default' ) ) . to . not . be . ok ;
97
99
done ( ) ;
98
100
} ) ;
@@ -104,7 +106,7 @@ describe('InfiniteLoading.vue', () => {
104
106
it ( 'should display no results prompt' , ( done ) => {
105
107
vm . onInfinite = function test ( ) {
106
108
this . $broadcast ( '$InfiniteLoading:complete' ) ;
107
- Vue . nextTick ( ( ) => {
109
+ this . $ nextTick( ( ) => {
108
110
expect ( isShow ( vm . $el . querySelectorAll ( '.infinite-status-prompt' ) [ 0 ] ) ) . to . be . true ;
109
111
done ( ) ;
110
112
} ) ;
@@ -117,7 +119,7 @@ describe('InfiniteLoading.vue', () => {
117
119
vm . onInfinite = function test ( ) {
118
120
this . $broadcast ( '$InfiniteLoading:loaded' ) ;
119
121
this . $broadcast ( '$InfiniteLoading:complete' ) ;
120
- Vue . nextTick ( ( ) => {
122
+ this . $ nextTick( ( ) => {
121
123
expect ( isShow ( vm . $el . querySelectorAll ( '.infinite-status-prompt' ) [ 1 ] ) ) . to . be . true ;
122
124
done ( ) ;
123
125
} ) ;
@@ -147,4 +149,142 @@ describe('InfiniteLoading.vue', () => {
147
149
148
150
expect ( vm . $el . querySelector ( '.custom-spinner' ) ) . to . be . ok ;
149
151
} ) ;
152
+
153
+ it ( 'should working properly with transition and stagger' , ( done ) => {
154
+ const transitonVm = new Vue ( {
155
+ data : {
156
+ list : [ ] ,
157
+ distance : 50 ,
158
+ isLoadedAll : false ,
159
+ isDivScroll : true ,
160
+ isCustomSpinner : false ,
161
+ bounce : Vue . transition ( 'bounce' ) ,
162
+ stagger : 10 ,
163
+ pageItems : 20 ,
164
+ } ,
165
+ template : `
166
+ <div style="height: 100px; overflow: auto;">
167
+ <style>
168
+ .item.bounce-transition{
169
+ transition: all .3s;
170
+ opacity: 1;
171
+ }
172
+ .item.bounce-enter, .item.bounce-leave{
173
+ opacity: 0;
174
+ }
175
+ </style>
176
+ <ul>
177
+ <li class="item" v-for="item in list" v-text="item" transition="bounce"
178
+ :stagger="stagger"></li>
179
+ </ul>
180
+ <infinite-loading :distance="distance"
181
+ :on-infinite="onInfinite"
182
+ v-if="!isLoadedAll"
183
+ :transition="bounce"
184
+ :stagger-count="list.length">
185
+ </infinite-loading>
186
+ </div>
187
+ ` ,
188
+ components : { InfiniteLoading } ,
189
+ methods : {
190
+ onInfinite ( ) {
191
+ const len = this . list . length + 1 ;
192
+ for ( let i = len ; i < len + this . pageItems ; i ++ ) {
193
+ this . list . push ( i ) ;
194
+ }
195
+
196
+ this . $nextTick ( ( ) => {
197
+ this . $broadcast ( '$InfiniteLoading:loaded' ) ;
198
+
199
+ if ( this . list . length <= this . pageItems ) {
200
+ // wait for transition complete
201
+ setTimeout ( ( ) => {
202
+ this . $el . onscroll = ( ) => {
203
+ this . $nextTick ( ( ) => {
204
+ // load more data when scroll after transition
205
+ expect ( this . list . length ) . to . equal ( this . pageItems * 2 ) ;
206
+ done ( ) ;
207
+ } ) ;
208
+ } ;
209
+
210
+ // trigger scroll event manually
211
+ this . $el . scrollTop = this . $el . scrollHeight ;
212
+ } , ( this . stagger * this . pageItems ) + 310 ) ;
213
+ }
214
+ } ) ;
215
+ } ,
216
+ } ,
217
+ } ) ;
218
+
219
+ transitonVm . $mount ( ) . $appendTo ( 'body' ) ;
220
+ } ) ;
221
+
222
+ it ( 'should reset properly with transition and stagger' , ( done ) => {
223
+ const transitonVm = new Vue ( {
224
+ data : {
225
+ list : [ ] ,
226
+ distance : 50 ,
227
+ isLoadedAll : false ,
228
+ isDivScroll : true ,
229
+ isCustomSpinner : false ,
230
+ bounce : Vue . transition ( 'bounce' ) ,
231
+ stagger : 10 ,
232
+ pageItems : 20 ,
233
+ } ,
234
+ template : `
235
+ <div style="height: 100px; overflow: auto;">
236
+ <style>
237
+ .item.bounce-transition{
238
+ transition: all .3s;
239
+ opacity: 1;
240
+ }
241
+ .item.bounce-enter, .item.bounce-leave{
242
+ opacity: 0;
243
+ }
244
+ </style>
245
+ <ul>
246
+ <li class="item" v-for="item in list" v-text="item" transition="bounce"
247
+ :stagger="stagger"></li>
248
+ </ul>
249
+ <infinite-loading :distance="distance"
250
+ :on-infinite="onInfinite"
251
+ v-if="!isLoadedAll"
252
+ :transition="bounce"
253
+ :stagger-count="list.length">
254
+ </infinite-loading>
255
+ </div>
256
+ ` ,
257
+ components : { InfiniteLoading } ,
258
+ ready ( ) {
259
+ // when the transition doesn't has hook function
260
+ delete this . bounce . afterEnter ;
261
+ } ,
262
+ methods : {
263
+ onInfinite ( ) {
264
+ const len = this . list . length + 1 ;
265
+ for ( let i = len ; i < len + this . pageItems ; i ++ ) {
266
+ this . list . push ( i ) ;
267
+ }
268
+ this . $broadcast ( '$InfiniteLoading:loaded' ) ;
269
+
270
+ // wait for transition complete
271
+ setTimeout ( ( ) => {
272
+ this . list = [ ] ;
273
+
274
+ // item will be removed one by one, so the count of item not be 0 immediately
275
+ expect ( this . $el . querySelectorAll ( 'ul li' ) . length !== 0 ) . to . be . true ;
276
+
277
+ // wait for transition complete
278
+ setTimeout ( ( ) => {
279
+ expect ( this . $el . querySelectorAll ( 'ul li' ) ) . to . have . lengthOf ( 0 ) ;
280
+ this . $broadcast ( '$InfiniteLoading:reset' ) ;
281
+ done ( ) ;
282
+ } , ( this . pageItems * this . stagger ) + 300 ) ;
283
+ } , ( this . pageItems * this . stagger ) + 300 ) ;
284
+ } ,
285
+ } ,
286
+ } ) ;
287
+
288
+ transitonVm . $mount ( ) . $appendTo ( 'body' ) ;
289
+ } ) ;
150
290
} ) ;
0 commit comments