Skip to content

Commit

Permalink
fix(props): correctly warn when a provided prop is Symbol (#10529)
Browse files Browse the repository at this point in the history
* fix(props): correctly warn when a provided prop is Symbol

Fixes #10519

* style: space before parens
  • Loading branch information
posva committed Sep 21, 2020
1 parent b97606c commit abb5ef3
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 9 deletions.
19 changes: 10 additions & 9 deletions src/core/util/props.js
Expand Up @@ -205,18 +205,19 @@ function getInvalidTypeMessage (name, value, expectedTypes) {
` Expected ${expectedTypes.map(capitalize).join(', ')}`
const expectedType = expectedTypes[0]
const receivedType = toRawType(value)
const expectedValue = styleValue(value, expectedType)
const receivedValue = styleValue(value, receivedType)
// check if we need to specify expected value
if (expectedTypes.length === 1 &&
isExplicable(expectedType) &&
!isBoolean(expectedType, receivedType)) {
message += ` with value ${expectedValue}`
if (
expectedTypes.length === 1 &&
isExplicable(expectedType) &&
isExplicable(typeof value) &&
!isBoolean(expectedType, receivedType)
) {
message += ` with value ${styleValue(value, expectedType)}`
}
message += `, got ${receivedType} `
// check if we need to specify received value
if (isExplicable(receivedType)) {
message += `with value ${receivedValue}.`
message += `with value ${styleValue(value, receivedType)}.`
}
return message
}
Expand All @@ -231,9 +232,9 @@ function styleValue (value, type) {
}
}

const EXPLICABLE_TYPES = ['string', 'number', 'boolean']
function isExplicable (value) {
const explicitTypes = ['string', 'number', 'boolean']
return explicitTypes.some(elem => value.toLowerCase() === elem)
return EXPLICABLE_TYPES.some(elem => value.toLowerCase() === elem)
}

function isBoolean (...args) {
Expand Down
10 changes: 10 additions & 0 deletions test/unit/features/options/props.spec.js
Expand Up @@ -241,6 +241,16 @@ describe('Options props', () => {
makeInstance({}, Symbol)
expect('Expected Symbol, got Object').toHaveBeenWarned()
})

it('warns when expected an explicable type but Symbol was provided', () => {
makeInstance(Symbol('foo'), String)
expect('Expected String, got Symbol').toHaveBeenWarned()
})

it('warns when expected an explicable type but Symbol was provided', () => {
makeInstance(Symbol('foo'), [String, Number])
expect('Expected String, Number, got Symbol').toHaveBeenWarned()
})
}

it('custom constructor', () => {
Expand Down

0 comments on commit abb5ef3

Please sign in to comment.