@@ -1086,7 +1086,7 @@ describe('SSR: renderToString', () => {
1086
1086
)
1087
1087
} )
1088
1088
1089
- it ( 'custom directives' , done => {
1089
+ it ( 'custom directives on raw element ' , done => {
1090
1090
const renderer = createRenderer ( {
1091
1091
directives : {
1092
1092
'class-prefixer' : ( node , dir ) => {
@@ -1129,6 +1129,98 @@ describe('SSR: renderToString', () => {
1129
1129
)
1130
1130
} )
1131
1131
1132
+ it ( 'custom directives on component' , done => {
1133
+ const Test = {
1134
+ template : '<span>hello world</span>'
1135
+ }
1136
+ const renderer = createRenderer ( {
1137
+ directives : {
1138
+ 'class-prefixer' : ( node , dir ) => {
1139
+ if ( node . data . class ) {
1140
+ node . data . class = `${ dir . value } -${ node . data . class } `
1141
+ }
1142
+ if ( node . data . staticClass ) {
1143
+ node . data . staticClass = `${ dir . value } -${ node . data . staticClass } `
1144
+ }
1145
+ }
1146
+ }
1147
+ } )
1148
+ renderer . renderToString (
1149
+ new Vue ( {
1150
+ template :
1151
+ '<p><Test v-class-prefixer="\'my\'" class="class1" :class="\'class2\'" /></p>' ,
1152
+ components : { Test }
1153
+ } ) ,
1154
+ ( err , result ) => {
1155
+ expect ( err ) . toBeNull ( )
1156
+ expect ( result ) . toContain (
1157
+ '<p data-server-rendered="true"><span class="my-class1 my-class2">hello world</span></p>'
1158
+ )
1159
+ done ( )
1160
+ }
1161
+ )
1162
+ } )
1163
+
1164
+ it ( 'custom directives on element root of a component' , done => {
1165
+ const Test = {
1166
+ template :
1167
+ '<span v-class-prefixer="\'my\'" class="class1" :class="\'class2\'">hello world</span>'
1168
+ }
1169
+ const renderer = createRenderer ( {
1170
+ directives : {
1171
+ 'class-prefixer' : ( node , dir ) => {
1172
+ if ( node . data . class ) {
1173
+ node . data . class = `${ dir . value } -${ node . data . class } `
1174
+ }
1175
+ if ( node . data . staticClass ) {
1176
+ node . data . staticClass = `${ dir . value } -${ node . data . staticClass } `
1177
+ }
1178
+ }
1179
+ }
1180
+ } )
1181
+ renderer . renderToString (
1182
+ new Vue ( {
1183
+ template : '<p><Test /></p>' ,
1184
+ components : { Test }
1185
+ } ) ,
1186
+ ( err , result ) => {
1187
+ expect ( err ) . toBeNull ( )
1188
+ expect ( result ) . toContain (
1189
+ '<p data-server-rendered="true"><span class="my-class1 my-class2">hello world</span></p>'
1190
+ )
1191
+ done ( )
1192
+ }
1193
+ )
1194
+ } )
1195
+
1196
+ it ( 'custom directives on element with parent element' , done => {
1197
+ const renderer = createRenderer ( {
1198
+ directives : {
1199
+ 'class-prefixer' : ( node , dir ) => {
1200
+ if ( node . data . class ) {
1201
+ node . data . class = `${ dir . value } -${ node . data . class } `
1202
+ }
1203
+ if ( node . data . staticClass ) {
1204
+ node . data . staticClass = `${ dir . value } -${ node . data . staticClass } `
1205
+ }
1206
+ }
1207
+ }
1208
+ } )
1209
+ renderer . renderToString (
1210
+ new Vue ( {
1211
+ template :
1212
+ '<p><span v-class-prefixer="\'my\'" class="class1" :class="\'class2\'">hello world</span></p>'
1213
+ } ) ,
1214
+ ( err , result ) => {
1215
+ expect ( err ) . toBeNull ( )
1216
+ expect ( result ) . toContain (
1217
+ '<p data-server-rendered="true"><span class="my-class1 my-class2">hello world</span></p>'
1218
+ )
1219
+ done ( )
1220
+ }
1221
+ )
1222
+ } )
1223
+
1132
1224
it ( 'should not warn for custom directives that do not have server-side implementation' , done => {
1133
1225
renderToString (
1134
1226
new Vue ( {
0 commit comments