File tree Expand file tree Collapse file tree 2 files changed +38
-2
lines changed Expand file tree Collapse file tree 2 files changed +38
-2
lines changed Original file line number Diff line number Diff line change @@ -321,6 +321,42 @@ describe('component props', () => {
321321 expect ( `Missing required prop: "num"` ) . toHaveBeenWarned ( )
322322 } )
323323
324+ test ( 'warn on type mismatch' , ( ) => {
325+ class MyClass {
326+
327+ }
328+ const Comp = {
329+ props : {
330+ bool : { type : Boolean } ,
331+ str : { type : String } ,
332+ num : { type : Number } ,
333+ arr : { type : Array } ,
334+ obj : { type : Object } ,
335+ cls : { type : MyClass } ,
336+ fn : { type : Function } ,
337+ } ,
338+ setup ( ) {
339+ return ( ) => null
340+ }
341+ }
342+ render ( h ( Comp , {
343+ bool : 'true' ,
344+ str : 100 ,
345+ num : '100' ,
346+ arr : { } ,
347+ obj : 'false' ,
348+ cls : { } ,
349+ fn : true ,
350+ } ) , nodeOps . createElement ( 'div' ) )
351+ expect ( `Invalid prop: type check failed for prop "bool". Expected Boolean, got String` ) . toHaveBeenWarned ( )
352+ expect ( `Invalid prop: type check failed for prop "str". Expected String with value "100", got Number with value 100.` ) . toHaveBeenWarned ( )
353+ expect ( `Invalid prop: type check failed for prop "num". Expected Number with value 100, got String with value "100".` ) . toHaveBeenWarned ( )
354+ expect ( `Invalid prop: type check failed for prop "arr". Expected Array, got Object` ) . toHaveBeenWarned ( )
355+ expect ( `Invalid prop: type check failed for prop "obj". Expected Object, got String with value "false"` ) . toHaveBeenWarned ( )
356+ expect ( `Invalid prop: type check failed for prop "fn". Expected Function, got Boolean with value true.` ) . toHaveBeenWarned ( )
357+ expect ( `Invalid prop: type check failed for prop "cls". Expected MyClass, got Object` ) . toHaveBeenWarned ( )
358+ } )
359+
324360 // #3495
325361 test ( 'should not warn required props using kebab-case' , async ( ) => {
326362 const Comp = {
Original file line number Diff line number Diff line change @@ -557,8 +557,8 @@ function validatePropName(key: string) {
557557// use function string name to check type constructors
558558// so that it works across vms / iframes.
559559function getType ( ctor : Prop < any > ) : string {
560- const match = ctor && ctor . toString ( ) . match ( / ^ \s * f u n c t i o n ( \w + ) / )
561- return match ? match [ 1 ] : ctor === null ? 'null' : ''
560+ const match = ctor && ctor . toString ( ) . match ( / ^ \s * ( f u n c t i o n | c l a s s ) ( \w + ) / )
561+ return match ? match [ 2 ] : ctor === null ? 'null' : ''
562562}
563563
564564function isSameType ( a : Prop < any > , b : Prop < any > ) : boolean {
You can’t perform that action at this time.
0 commit comments