6
6
nodeOps ,
7
7
ref ,
8
8
render ,
9
+ serializeInner ,
9
10
useSlots ,
10
11
} from '@vue/runtime-test'
11
12
import { createBlock , normalizeVNode } from '../src/vnode'
@@ -74,6 +75,10 @@ describe('component: slots', () => {
74
75
footer : [ 'f1' , 'f2' ] ,
75
76
} )
76
77
78
+ expect (
79
+ '[Vue warn]: Non-function value encountered for slot "_inner". Prefer function slots for better performance.' ,
80
+ ) . toHaveBeenWarned ( )
81
+
77
82
expect (
78
83
'[Vue warn]: Non-function value encountered for slot "header". Prefer function slots for better performance.' ,
79
84
) . toHaveBeenWarned ( )
@@ -82,8 +87,8 @@ describe('component: slots', () => {
82
87
'[Vue warn]: Non-function value encountered for slot "footer". Prefer function slots for better performance.' ,
83
88
) . toHaveBeenWarned ( )
84
89
85
- expect ( slots ) . not . toHaveProperty ( '_inner' )
86
90
expect ( slots ) . not . toHaveProperty ( 'foo' )
91
+ expect ( slots . _inner ( ) ) . toMatchObject ( [ normalizeVNode ( '_inner' ) ] )
87
92
expect ( slots . header ( ) ) . toMatchObject ( [ normalizeVNode ( 'header' ) ] )
88
93
expect ( slots . footer ( ) ) . toMatchObject ( [
89
94
normalizeVNode ( 'f1' ) ,
@@ -442,4 +447,22 @@ describe('component: slots', () => {
442
447
'Slot "default" invoked outside of the render function' ,
443
448
) . toHaveBeenWarned ( )
444
449
} )
450
+
451
+ test ( 'slot name starts with underscore' , ( ) => {
452
+ const Comp = {
453
+ setup ( _ : any , { slots } : any ) {
454
+ return ( ) => slots . _foo ( )
455
+ } ,
456
+ }
457
+
458
+ const App = {
459
+ setup ( ) {
460
+ return ( ) => h ( Comp , null , { _foo : ( ) => 'foo' } )
461
+ } ,
462
+ }
463
+
464
+ const root = nodeOps . createElement ( 'div' )
465
+ createApp ( App ) . mount ( root )
466
+ expect ( serializeInner ( root ) ) . toBe ( 'foo' )
467
+ } )
445
468
} )
0 commit comments