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