mirror of https://github.com/vuejs/vue.git
				
				
				
			test: fix Object.prototype.watch related warnings
This commit is contained in:
		
							parent
							
								
									1f9e924971
								
							
						
					
					
						commit
						606666d5a9
					
				|  | @ -20,6 +20,7 @@ import { | |||
|   hasOwn, | ||||
|   isReserved, | ||||
|   handleError, | ||||
|   nativeWatch, | ||||
|   validateProp, | ||||
|   isPlainObject, | ||||
|   isReservedAttribute | ||||
|  | @ -53,7 +54,9 @@ export function initState (vm: Component) { | |||
|     observe(vm._data = {}, true /* asRootData */) | ||||
|   } | ||||
|   if (opts.computed) initComputed(vm, opts.computed) | ||||
|   if (opts.watch) initWatch(vm, opts.watch) | ||||
|   if (opts.watch && opts.watch !== nativeWatch) { | ||||
|     initWatch(vm, opts.watch) | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| function checkOptionType (vm: Component, name: string) { | ||||
|  |  | |||
|  | @ -17,6 +17,9 @@ export const isAndroid = UA && UA.indexOf('android') > 0 | |||
| export const isIOS = UA && /iphone|ipad|ipod|ios/.test(UA) | ||||
| export const isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge | ||||
| 
 | ||||
| // Firefix has a "watch" function on Object.prototype...
 | ||||
| export const nativeWatch = ({}).watch | ||||
| 
 | ||||
| export let supportsPassive = false | ||||
| if (inBrowser) { | ||||
|   try { | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ | |||
| 
 | ||||
| import config from '../config' | ||||
| import { warn } from './debug' | ||||
| import { nativeWatch } from './env' | ||||
| import { set } from '../observer/index' | ||||
| 
 | ||||
| import { | ||||
|  | @ -172,6 +173,9 @@ ASSET_TYPES.forEach(function (type) { | |||
|  * another, so we merge them as arrays. | ||||
|  */ | ||||
| strats.watch = function (parentVal: ?Object, childVal: ?Object): ?Object { | ||||
|   // work around Firefox's Object.prototype.watch...
 | ||||
|   if (parentVal === nativeWatch) parentVal = undefined | ||||
|   if (childVal === nativeWatch) childVal = undefined | ||||
|   /* istanbul ignore if */ | ||||
|   if (!childVal) return Object.create(parentVal || null) | ||||
|   if (!parentVal) return childVal | ||||
|  |  | |||
|  | @ -1,14 +1,14 @@ | |||
| import Vue from 'vue' | ||||
| 
 | ||||
| export default function testObjectOption (name) { | ||||
|   it('should warn non object', () => { | ||||
|   it('should warn non object value', () => { | ||||
|     const options = {} | ||||
|     options[name] = () => {} | ||||
|     new Vue(options) | ||||
|     expect(`component option "${name}" should be an object`).toHaveBeenWarned() | ||||
|   }) | ||||
| 
 | ||||
|   it('don\'t warn when is an object', () => { | ||||
|   it('should not warn valid object value', () => { | ||||
|     const options = {} | ||||
|     options[name] = {} | ||||
|     new Vue(options) | ||||
|  |  | |||
|  | @ -7,6 +7,8 @@ describe('Options watch', () => { | |||
|     spy = jasmine.createSpy('watch') | ||||
|   }) | ||||
| 
 | ||||
|   testObjectOption('watch') | ||||
| 
 | ||||
|   it('basic usage', done => { | ||||
|     const vm = new Vue({ | ||||
|       data: { | ||||
|  | @ -24,8 +26,6 @@ describe('Options watch', () => { | |||
|     }).then(done) | ||||
|   }) | ||||
| 
 | ||||
|   testObjectOption('watch') | ||||
| 
 | ||||
|   it('string method name', done => { | ||||
|     const vm = new Vue({ | ||||
|       data: { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue