mirror of https://github.com/vuejs/core.git
				
				
				
			fix(reactivity): explicitly do type conversions in warning strings (#129)
This commit is contained in:
		
							parent
							
								
									3d975247cd
								
							
						
					
					
						commit
						5eacfaf210
					
				| 
						 | 
					@ -13,6 +13,11 @@ import {
 | 
				
			||||||
} from '../src'
 | 
					} from '../src'
 | 
				
			||||||
import { mockWarn } from '@vue/runtime-test'
 | 
					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', () => {
 | 
					describe('reactivity/readonly', () => {
 | 
				
			||||||
  mockWarn()
 | 
					  mockWarn()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,27 +43,51 @@ describe('reactivity/readonly', () => {
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('should not allow mutation', () => {
 | 
					    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
 | 
					      observed.foo = 2
 | 
				
			||||||
      expect(observed.foo).toBe(1)
 | 
					      expect(observed.foo).toBe(1)
 | 
				
			||||||
      expect(
 | 
					      expect(
 | 
				
			||||||
        `Set operation on key "foo" failed: target is readonly.`
 | 
					        `Set operation on key "foo" failed: target is readonly.`
 | 
				
			||||||
      ).toHaveBeenWarnedLast()
 | 
					      ).toHaveBeenWarnedLast()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      observed.bar.baz = 3
 | 
					      observed.bar.baz = 3
 | 
				
			||||||
      expect(observed.bar.baz).toBe(2)
 | 
					      expect(observed.bar.baz).toBe(2)
 | 
				
			||||||
      expect(
 | 
					      expect(
 | 
				
			||||||
        `Set operation on key "baz" failed: target is readonly.`
 | 
					        `Set operation on key "baz" failed: target is readonly.`
 | 
				
			||||||
      ).toHaveBeenWarnedLast()
 | 
					      ).toHaveBeenWarnedLast()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      observed[qux] = 4
 | 
				
			||||||
 | 
					      expect(observed[qux]).toBe(3)
 | 
				
			||||||
 | 
					      expect(
 | 
				
			||||||
 | 
					        `Set operation on key "Symbol(qux)" failed: target is readonly.`
 | 
				
			||||||
 | 
					      ).toHaveBeenWarnedLast()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      delete observed.foo
 | 
					      delete observed.foo
 | 
				
			||||||
      expect(observed.foo).toBe(1)
 | 
					      expect(observed.foo).toBe(1)
 | 
				
			||||||
      expect(
 | 
					      expect(
 | 
				
			||||||
        `Delete operation on key "foo" failed: target is readonly.`
 | 
					        `Delete operation on key "foo" failed: target is readonly.`
 | 
				
			||||||
      ).toHaveBeenWarnedLast()
 | 
					      ).toHaveBeenWarnedLast()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      delete observed.bar.baz
 | 
					      delete observed.bar.baz
 | 
				
			||||||
      expect(observed.bar.baz).toBe(2)
 | 
					      expect(observed.bar.baz).toBe(2)
 | 
				
			||||||
      expect(
 | 
					      expect(
 | 
				
			||||||
        `Delete operation on key "baz" failed: target is readonly.`
 | 
					        `Delete operation on key "baz" failed: target is readonly.`
 | 
				
			||||||
      ).toHaveBeenWarnedLast()
 | 
					      ).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', () => {
 | 
					    it('should allow mutation when unlocked', () => {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -107,7 +107,7 @@ export const readonlyHandlers: ProxyHandler<any> = {
 | 
				
			||||||
    if (LOCKED) {
 | 
					    if (LOCKED) {
 | 
				
			||||||
      if (__DEV__) {
 | 
					      if (__DEV__) {
 | 
				
			||||||
        console.warn(
 | 
					        console.warn(
 | 
				
			||||||
          `Set operation on key "${key as any}" failed: target is readonly.`,
 | 
					          `Set operation on key "${String(key)}" failed: target is readonly.`,
 | 
				
			||||||
          target
 | 
					          target
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
| 
						 | 
					@ -121,7 +121,9 @@ export const readonlyHandlers: ProxyHandler<any> = {
 | 
				
			||||||
    if (LOCKED) {
 | 
					    if (LOCKED) {
 | 
				
			||||||
      if (__DEV__) {
 | 
					      if (__DEV__) {
 | 
				
			||||||
        console.warn(
 | 
					        console.warn(
 | 
				
			||||||
          `Delete operation on key "${key as any}" failed: target is readonly.`,
 | 
					          `Delete operation on key "${String(
 | 
				
			||||||
 | 
					            key
 | 
				
			||||||
 | 
					          )}" failed: target is readonly.`,
 | 
				
			||||||
          target
 | 
					          target
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue