1
1
import { createApp , h , Suspense } from 'vue'
2
2
import { renderToString } from '../src/renderToString'
3
- import { ssrRenderSuspense } from '../src/helpers/ssrRenderSuspense'
4
- import { ssrRenderComponent } from '../src'
5
- import { mockError } from '@vue/shared'
3
+ import { mockWarn } from '@vue/shared'
6
4
7
5
describe ( 'SSR Suspense' , ( ) => {
8
- mockError ( )
6
+ mockWarn ( )
9
7
10
8
const ResolvingAsync = {
11
9
async setup ( ) {
@@ -19,161 +17,109 @@ describe('SSR Suspense', () => {
19
17
}
20
18
}
21
19
22
- describe ( 'compiled' , ( ) => {
23
- test ( 'basic' , async ( ) => {
24
- const app = createApp ( {
25
- ssrRender ( _ctx , _push ) {
26
- _push (
27
- ssrRenderSuspense ( {
28
- default : _push => {
29
- _push ( '<div>async</div>' )
30
- }
31
- } )
32
- )
33
- }
34
- } )
35
-
36
- expect ( await renderToString ( app ) ) . toBe ( `<!--[--><div>async</div><!--]-->` )
37
- } )
38
-
39
- test ( 'with async component' , async ( ) => {
40
- const app = createApp ( {
41
- ssrRender ( _ctx , _push ) {
42
- _push (
43
- ssrRenderSuspense ( {
44
- default : _push => {
45
- _push ( ssrRenderComponent ( ResolvingAsync ) )
46
- }
47
- } )
48
- )
49
- }
50
- } )
51
-
52
- expect ( await renderToString ( app ) ) . toBe ( `<!--[--><div>async</div><!--]-->` )
53
- } )
54
-
55
- test ( 'fallback' , async ( ) => {
56
- const app = createApp ( {
57
- ssrRender ( _ctx , _push ) {
58
- _push (
59
- ssrRenderSuspense ( {
60
- default : _push => {
61
- _push ( ssrRenderComponent ( RejectingAsync ) )
62
- } ,
63
- fallback : _push => {
64
- _push ( '<div>fallback</div>' )
65
- }
66
- } )
67
- )
68
- }
69
- } )
70
-
71
- expect ( await renderToString ( app ) ) . toBe (
72
- `<!--[--><div>fallback</div><!--]-->`
73
- )
74
- expect ( 'Uncaught error in async setup' ) . toHaveBeenWarned ( )
75
- } )
76
- } )
77
-
78
- describe ( 'vnode' , ( ) => {
79
- test ( 'content' , async ( ) => {
80
- const Comp = {
81
- render ( ) {
82
- return h ( Suspense , null , {
83
- default : h ( ResolvingAsync ) ,
84
- fallback : h ( 'div' , 'fallback' )
85
- } )
86
- }
20
+ test ( 'content' , async ( ) => {
21
+ const Comp = {
22
+ render ( ) {
23
+ return h ( Suspense , null , {
24
+ default : h ( ResolvingAsync ) ,
25
+ fallback : h ( 'div' , 'fallback' )
26
+ } )
87
27
}
28
+ }
88
29
89
- expect ( await renderToString ( createApp ( Comp ) ) ) . toBe ( `<div>async</div>` )
90
- } )
30
+ expect ( await renderToString ( createApp ( Comp ) ) ) . toBe ( `<div>async</div>` )
31
+ } )
91
32
92
- test ( 'fallback' , async ( ) => {
93
- const Comp = {
94
- render ( ) {
95
- return h ( Suspense , null , {
96
- default : h ( RejectingAsync ) ,
97
- fallback : h ( 'div' , 'fallback' )
98
- } )
99
- }
33
+ test ( 'reject' , async ( ) => {
34
+ const Comp = {
35
+ render ( ) {
36
+ return h ( Suspense , null , {
37
+ default : h ( RejectingAsync ) ,
38
+ fallback : h ( 'div' , 'fallback' )
39
+ } )
100
40
}
41
+ }
101
42
102
- expect ( await renderToString ( createApp ( Comp ) ) ) . toBe ( `<div>fallback</div>` )
103
- expect ( 'Uncaught error in async setup' ) . toHaveBeenWarned ( )
104
- } )
43
+ expect ( await renderToString ( createApp ( Comp ) ) ) . toBe ( `<!---->` )
44
+ expect ( 'Uncaught error in async setup' ) . toHaveBeenWarned ( )
45
+ expect ( 'missing template' ) . toHaveBeenWarned ( )
46
+ } )
105
47
106
- test ( '2 components' , async ( ) => {
107
- const Comp = {
108
- render ( ) {
109
- return h ( Suspense , null , {
110
- default : h ( 'div' , [ h ( ResolvingAsync ) , h ( ResolvingAsync ) ] ) ,
111
- fallback : h ( 'div' , 'fallback' )
112
- } )
113
- }
48
+ test ( '2 components' , async ( ) => {
49
+ const Comp = {
50
+ render ( ) {
51
+ return h ( Suspense , null , {
52
+ default : h ( 'div' , [ h ( ResolvingAsync ) , h ( ResolvingAsync ) ] ) ,
53
+ fallback : h ( 'div' , 'fallback' )
54
+ } )
114
55
}
56
+ }
115
57
116
- expect ( await renderToString ( createApp ( Comp ) ) ) . toBe (
117
- `<div><div>async</div><div>async</div></div>`
118
- )
119
- } )
58
+ expect ( await renderToString ( createApp ( Comp ) ) ) . toBe (
59
+ `<div><div>async</div><div>async</div></div>`
60
+ )
61
+ } )
120
62
121
- test ( 'resolving component + rejecting component' , async ( ) => {
122
- const Comp = {
123
- render ( ) {
124
- return h ( Suspense , null , {
125
- default : h ( 'div' , [ h ( ResolvingAsync ) , h ( RejectingAsync ) ] ) ,
126
- fallback : h ( 'div' , 'fallback' )
127
- } )
128
- }
63
+ test ( 'resolving component + rejecting component' , async ( ) => {
64
+ const Comp = {
65
+ render ( ) {
66
+ return h ( Suspense , null , {
67
+ default : h ( 'div' , [ h ( ResolvingAsync ) , h ( RejectingAsync ) ] ) ,
68
+ fallback : h ( 'div' , 'fallback' )
69
+ } )
129
70
}
71
+ }
130
72
131
- expect ( await renderToString ( createApp ( Comp ) ) ) . toBe ( `<div>fallback</div>` )
132
- expect ( 'Uncaught error in async setup' ) . toHaveBeenWarned ( )
133
- } )
73
+ expect ( await renderToString ( createApp ( Comp ) ) ) . toBe (
74
+ `<div><div>async</div><!----></div>`
75
+ )
76
+ expect ( 'Uncaught error in async setup' ) . toHaveBeenWarned ( )
77
+ expect ( 'missing template or render function' ) . toHaveBeenWarned ( )
78
+ } )
134
79
135
- test ( 'failing suspense in passing suspense' , async ( ) => {
136
- const Comp = {
137
- render ( ) {
138
- return h ( Suspense , null , {
139
- default : h ( 'div' , [
140
- h ( ResolvingAsync ) ,
141
- h ( Suspense , null , {
142
- default : h ( 'div' , [ h ( RejectingAsync ) ] ) ,
143
- fallback : h ( 'div' , 'fallback 2' )
144
- } )
145
- ] ) ,
146
- fallback : h ( 'div' , 'fallback 1' )
147
- } )
148
- }
80
+ test ( 'failing suspense in passing suspense' , async ( ) => {
81
+ const Comp = {
82
+ render ( ) {
83
+ return h ( Suspense , null , {
84
+ default : h ( 'div' , [
85
+ h ( ResolvingAsync ) ,
86
+ h ( Suspense , null , {
87
+ default : h ( 'div' , [ h ( RejectingAsync ) ] ) ,
88
+ fallback : h ( 'div' , 'fallback 2' )
89
+ } )
90
+ ] ) ,
91
+ fallback : h ( 'div' , 'fallback 1' )
92
+ } )
149
93
}
94
+ }
150
95
151
- expect ( await renderToString ( createApp ( Comp ) ) ) . toBe (
152
- `<div><div>async</div><div>fallback 2</div></div>`
153
- )
154
- expect ( 'Uncaught error in async setup' ) . toHaveBeenWarned ( )
155
- } )
96
+ expect ( await renderToString ( createApp ( Comp ) ) ) . toBe (
97
+ `<div><div>async</div><div><!----></div></div>`
98
+ )
99
+ expect ( 'Uncaught error in async setup' ) . toHaveBeenWarned ( )
100
+ expect ( 'missing template' ) . toHaveBeenWarned ( )
101
+ } )
156
102
157
- test ( 'passing suspense in failing suspense' , async ( ) => {
158
- const Comp = {
159
- render ( ) {
160
- return h ( Suspense , null , {
161
- default : h ( 'div' , [
162
- h ( RejectingAsync ) ,
163
- h ( Suspense , null , {
164
- default : h ( 'div' , [ h ( ResolvingAsync ) ] ) ,
165
- fallback : h ( 'div' , 'fallback 2' )
166
- } )
167
- ] ) ,
168
- fallback : h ( 'div' , 'fallback 1' )
169
- } )
170
- }
103
+ test ( 'passing suspense in failing suspense' , async ( ) => {
104
+ const Comp = {
105
+ render ( ) {
106
+ return h ( Suspense , null , {
107
+ default : h ( 'div' , [
108
+ h ( RejectingAsync ) ,
109
+ h ( Suspense , null , {
110
+ default : h ( 'div' , [ h ( ResolvingAsync ) ] ) ,
111
+ fallback : h ( 'div' , 'fallback 2' )
112
+ } )
113
+ ] ) ,
114
+ fallback : h ( 'div' , 'fallback 1' )
115
+ } )
171
116
}
117
+ }
172
118
173
- expect ( await renderToString ( createApp ( Comp ) ) ) . toBe (
174
- `<div>fallback 1 </div>`
175
- )
176
- expect ( 'Uncaught error in async setup' ) . toHaveBeenWarned ( )
177
- } )
119
+ expect ( await renderToString ( createApp ( Comp ) ) ) . toBe (
120
+ `<div><!----><div><div>async</div></div> </div>`
121
+ )
122
+ expect ( 'Uncaught error in async setup' ) . toHaveBeenWarned ( )
123
+ expect ( 'missing template' ) . toHaveBeenWarned ( )
178
124
} )
179
125
} )
0 commit comments