@@ -9,48 +9,84 @@ function isShow(elm) {
9
9
10
10
describe ( 'InfiniteLoading.vue' , ( ) => {
11
11
let vm ;
12
-
13
- // create new Vue instance for every test case
14
- beforeEach ( ( ) => {
15
- vm = new Vue ( {
16
- data : {
12
+ const initConf = {
13
+ data ( ) {
14
+ return {
17
15
list : [ ] ,
18
16
distance : 50 ,
19
17
isLoadedAll : false ,
20
18
isDivScroll : true ,
21
19
isCustomSpinner : false ,
22
- } ,
23
- template : `
24
- <div style="height: 100px;"
25
- :style="{
26
- overflow: isDivScroll ? 'auto' : 'visible'
27
- }">
28
- <ul>
29
- <li v-for="item in list" v-text="item"></li>
30
- </ul>
31
- <infinite-loading :distance="distance"
32
- :on-infinite="onInfinite"
33
- v-if="!isLoadedAll">
34
- <span slot="spinner" v-if="isCustomSpinner"><i class="custom-spinner"></i></span>
35
- </infinite-loading>
36
- </div>
37
- ` ,
38
- components : { InfiniteLoading } ,
39
- methods : { } ,
40
- } ) ;
20
+ } ;
21
+ } ,
22
+ render ( createElement ) {
23
+ return createElement (
24
+ 'div' ,
25
+ {
26
+ style : {
27
+ height : '100px' ,
28
+ overflow : this . isDivScroll ? 'auto' : 'visible' ,
29
+ } ,
30
+ } ,
31
+ [
32
+ createElement ( 'ul' , this . list . map ( ( item ) => createElement ( 'li' , item ) ) ) ,
33
+ this . isLoadedAll ? undefined : createElement ( InfiniteLoading ,
34
+ {
35
+ props : {
36
+ distance : this . distance ,
37
+ onInfinite : this . onInfinite ,
38
+ } ,
39
+ ref : 'infiniteLoading' ,
40
+ } ,
41
+ [
42
+ this . isCustomSpinner ? createElement ( 'span' ,
43
+ {
44
+ slot : 'spinner' ,
45
+ } ,
46
+ [
47
+ createElement ( 'i' , {
48
+ attrs : {
49
+ class : 'custom-spinner' ,
50
+ } ,
51
+ } ) ,
52
+ ]
53
+ ) : undefined ,
54
+ ]
55
+ ) ,
56
+ ]
57
+ ) ;
58
+ } ,
59
+ } ;
60
+
61
+ // create new Vue instance for every test case
62
+ beforeEach ( ( ) => {
63
+ const container = document . createElement ( 'div' ) ;
64
+ container . setAttribute ( 'id' , 'app' ) ;
65
+ document . body . appendChild ( container ) ;
66
+
67
+ vm = new Vue ( initConf ) ;
41
68
} ) ;
42
69
43
70
afterEach ( ( ) => {
44
- vm . $destroy ( ) ;
71
+ /**
72
+ * because of call the $destroy method of parent cannot trigger
73
+ * destroy event for child component in Vue.js 2.0.0-rc6
74
+ */
75
+ vm . $refs . infiniteLoading && vm . $refs . infiniteLoading . $destroy ( ) ;
76
+ vm . $destroy ( true ) ;
77
+ /**
78
+ * because of pass true as the argument for destroy method cannot
79
+ * remove element from DOM in Vue.js 2.0.0-rc6
80
+ */
81
+ vm . $el && vm . $el . remove ( ) ;
45
82
} ) ;
46
83
47
- it ( 'should render a basic template' , ( ) => {
48
- vm . isDivScroll = false ;
49
- vm . distance = undefined ;
50
-
51
- vm . $mount ( ) . $appendTo ( 'body' ) ;
52
-
53
- expect ( vm . $el . querySelector ( '.loading-default' ) ) . to . be . ok ;
84
+ it ( 'should render a basic template' , ( done ) => {
85
+ setTimeout ( ( ) => {
86
+ vm . $mount ( '#app' ) ;
87
+ expect ( vm . $el . querySelector ( '.loading-default' ) ) . to . be . ok ;
88
+ done ( ) ;
89
+ } , 1 ) ;
54
90
} ) ;
55
91
56
92
it ( 'should execute callback and display a spinner immediately after initialize' , ( done ) => {
@@ -61,7 +97,7 @@ describe('InfiniteLoading.vue', () => {
61
97
} ) ;
62
98
} ;
63
99
64
- vm . $mount ( ) . $appendTo ( 'body ') ;
100
+ vm . $mount ( '#app ') ;
65
101
} ) ;
66
102
67
103
it ( 'should not to execute callback if the previous loading has not be completed' , ( done ) => {
@@ -84,7 +120,7 @@ describe('InfiniteLoading.vue', () => {
84
120
} ) ;
85
121
} . bind ( vm ) ;
86
122
87
- vm . $mount ( ) . $appendTo ( 'body ') ;
123
+ vm . $mount ( '#app ') ;
88
124
} ) ;
89
125
90
126
it ( 'should be destroyed completely by v-if' , ( done ) => {
@@ -96,53 +132,52 @@ describe('InfiniteLoading.vue', () => {
96
132
} ) ;
97
133
} . bind ( vm ) ;
98
134
99
- vm . $mount ( ) . $appendTo ( 'body ') ;
135
+ vm . $mount ( '#app ') ;
100
136
} ) ;
101
137
102
138
it ( 'should display no results prompt' , ( done ) => {
103
139
vm . onInfinite = function test ( ) {
104
- this . $broadcast ( '$InfiniteLoading:complete' ) ;
140
+ this . $refs . infiniteLoading . $emit ( '$InfiniteLoading:complete' ) ;
105
141
Vue . nextTick ( ( ) => {
106
142
expect ( isShow ( vm . $el . querySelectorAll ( '.infinite-status-prompt' ) [ 0 ] ) ) . to . be . true ;
107
143
done ( ) ;
108
144
} ) ;
109
145
} . bind ( vm ) ;
110
146
111
- vm . $mount ( ) . $appendTo ( 'body ') ;
147
+ vm . $mount ( '#app ') ;
112
148
} ) ;
113
149
114
150
it ( 'should display no more data prompt' , ( done ) => {
115
151
vm . onInfinite = function test ( ) {
116
- this . $broadcast ( '$InfiniteLoading:loaded' ) ;
117
- this . $broadcast ( '$InfiniteLoading:complete' ) ;
152
+ this . $refs . infiniteLoading . $emit ( '$InfiniteLoading:loaded' ) ;
153
+ this . $refs . infiniteLoading . $emit ( '$InfiniteLoading:complete' ) ;
118
154
Vue . nextTick ( ( ) => {
119
155
expect ( isShow ( vm . $el . querySelectorAll ( '.infinite-status-prompt' ) [ 1 ] ) ) . to . be . true ;
120
156
done ( ) ;
121
157
} ) ;
122
158
} . bind ( vm ) ;
123
159
124
- vm . $mount ( ) . $appendTo ( 'body ') ;
160
+ vm . $mount ( '#app ') ;
125
161
} ) ;
126
162
127
163
it ( 'should reset component and call onInfinite again' , ( done ) => {
128
164
let callCount = 0 ;
129
165
vm . onInfinite = function test ( ) {
130
166
if ( ! callCount ++ ) {
131
- this . $broadcast ( '$InfiniteLoading:reset' ) ;
167
+ this . $refs . infiniteLoading . $emit ( '$InfiniteLoading:reset' ) ;
132
168
} else {
133
169
done ( ) ;
134
170
}
135
171
} . bind ( vm ) ;
136
172
137
- vm . $mount ( ) . $appendTo ( 'body ') ;
173
+ vm . $mount ( '#app ') ;
138
174
} ) ;
139
175
140
176
it ( 'should display the custom spinner if customize it with slot' , ( ) => {
141
177
vm . isCustomSpinner = true ;
142
178
vm . isDivScroll = false ;
143
- vm . distance = undefined ;
144
-
145
- vm . $mount ( ) . $appendTo ( 'body' ) ;
179
+ delete vm . distance ;
180
+ vm . $mount ( '#app' ) ;
146
181
147
182
expect ( vm . $el . querySelector ( '.custom-spinner' ) ) . to . be . ok ;
148
183
} ) ;
0 commit comments