fix(reactivity): explicitly do type conversions in warning strings (#129)

This commit is contained in:
月迷津渡 2019-10-06 23:26:33 +08:00 committed by Evan You
parent 3d975247cd
commit 5eacfaf210
2 changed files with 34 additions and 3 deletions

View File

@ -13,6 +13,11 @@ import {
} from '../src'
import { mockWarn } from '@vue/runtime-test'
/**
* @see https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-4.html
*/
type Writable<T> = { -readonly [P in keyof T]: T[P] }
describe('reactivity/readonly', () => {
mockWarn()
@ -38,27 +43,51 @@ describe('reactivity/readonly', () => {
})
it('should not allow mutation', () => {
const observed: any = readonly({ foo: 1, bar: { baz: 2 } })
const qux = Symbol('qux')
const original = {
foo: 1,
bar: {
baz: 2
},
[qux]: 3
}
const observed: Writable<typeof original> = readonly(original)
observed.foo = 2
expect(observed.foo).toBe(1)
expect(
`Set operation on key "foo" failed: target is readonly.`
).toHaveBeenWarnedLast()
observed.bar.baz = 3
expect(observed.bar.baz).toBe(2)
expect(
`Set operation on key "baz" failed: target is readonly.`
).toHaveBeenWarnedLast()
observed[qux] = 4
expect(observed[qux]).toBe(3)
expect(
`Set operation on key "Symbol(qux)" failed: target is readonly.`
).toHaveBeenWarnedLast()
delete observed.foo
expect(observed.foo).toBe(1)
expect(
`Delete operation on key "foo" failed: target is readonly.`
).toHaveBeenWarnedLast()
delete observed.bar.baz
expect(observed.bar.baz).toBe(2)
expect(
`Delete operation on key "baz" failed: target is readonly.`
).toHaveBeenWarnedLast()
delete observed[qux]
expect(observed[qux]).toBe(3)
expect(
`Delete operation on key "Symbol(qux)" failed: target is readonly.`
).toHaveBeenWarnedLast()
})
it('should allow mutation when unlocked', () => {

View File

@ -107,7 +107,7 @@ export const readonlyHandlers: ProxyHandler<any> = {
if (LOCKED) {
if (__DEV__) {
console.warn(
`Set operation on key "${key as any}" failed: target is readonly.`,
`Set operation on key "${String(key)}" failed: target is readonly.`,
target
)
}
@ -121,7 +121,9 @@ export const readonlyHandlers: ProxyHandler<any> = {
if (LOCKED) {
if (__DEV__) {
console.warn(
`Delete operation on key "${key as any}" failed: target is readonly.`,
`Delete operation on key "${String(
key
)}" failed: target is readonly.`,
target
)
}