@@ -295,17 +295,30 @@ describe('setValue', () => {
295
295
template : '<div>{{ foo }} {{ bar }}</div>'
296
296
} )
297
297
298
+ const NestedInputComponentChild = defineComponent ( {
299
+ props : [ 'modelValue' , 'onUpdate:modelValue' ] ,
300
+ template : '<div>{{ modelValue }}</div>'
301
+ } )
302
+ const NestedInputComponent = defineComponent ( {
303
+ props : [ 'modelValue' , 'onUpdate:modelValue' ] ,
304
+ template : '<NestedInputComponentChild v-model="modelValue" />' ,
305
+ components : { NestedInputComponentChild }
306
+ } )
307
+
298
308
const Component = defineComponent ( {
299
309
template :
300
- '<PlainInputComponent v-model="plain" /><MultiInputComponent v-model:foo="foo" v-model:bar="bar" />' ,
310
+ `<PlainInputComponent v-model="plain" />
311
+ <MultiInputComponent v-model:foo="foo" v-model:bar="bar" />
312
+ <NestedInputComponent v-model="nested" />` ,
301
313
data ( ) {
302
314
return {
303
315
plain : null ,
304
316
foo : null ,
305
- bar : null
317
+ bar : null ,
318
+ nested : null
306
319
}
307
320
} ,
308
- components : { PlainInputComponent, MultiInputComponent }
321
+ components : { PlainInputComponent, MultiInputComponent, NestedInputComponent }
309
322
} )
310
323
311
324
describe ( 'mount' , ( ) => {
@@ -324,6 +337,14 @@ describe('setValue', () => {
324
337
expect ( multiInput . text ( ) ) . toContain ( 'fooValue' )
325
338
expect ( multiInput . text ( ) ) . toContain ( 'barValue' )
326
339
} )
340
+
341
+ it ( 'triggers a normal `v-model` on nested Vue Components' , async ( ) => {
342
+ const wrapper = mount ( Component )
343
+ const nested = wrapper . findComponent ( NestedInputComponent )
344
+ const child = nested . findComponent ( NestedInputComponentChild )
345
+ await child . setValue ( 'nested-value' )
346
+ expect ( nested . text ( ) ) . toContain ( 'nested-value' )
347
+ } )
327
348
} )
328
349
describe ( 'shallowMount' , ( ) => {
329
350
it ( 'triggers a normal `v-model` on a Vue Component' , async ( ) => {
0 commit comments