wip: test for v-model compat
This commit is contained in:
parent
6db7c00b42
commit
bb76cfae12
@ -0,0 +1,85 @@
|
|||||||
|
import Vue from '@vue/compat'
|
||||||
|
import { ComponentOptions } from '../../component'
|
||||||
|
import { nextTick } from '../../scheduler'
|
||||||
|
import {
|
||||||
|
DeprecationTypes,
|
||||||
|
deprecationData,
|
||||||
|
toggleDeprecationWarning
|
||||||
|
} from '../compatConfig'
|
||||||
|
import { triggerEvent } from './utils'
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
toggleDeprecationWarning(true)
|
||||||
|
Vue.configureCompat({
|
||||||
|
MODE: 2,
|
||||||
|
GLOBAL_MOUNT: 'suppress-warning'
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
toggleDeprecationWarning(false)
|
||||||
|
Vue.configureCompat({ MODE: 3 })
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('COMPONENT_V_MODEL', () => {
|
||||||
|
async function runTest(CustomInput: ComponentOptions) {
|
||||||
|
const vm = new Vue({
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
text: 'foo'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
components: { CustomInput },
|
||||||
|
template: `
|
||||||
|
<div>
|
||||||
|
<span>{{ text }}</span>
|
||||||
|
<custom-input v-model="text"></custom-input>
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
}).$mount() as any
|
||||||
|
|
||||||
|
const input = vm.$el.querySelector('input')
|
||||||
|
const span = vm.$el.querySelector('span')
|
||||||
|
|
||||||
|
expect(input.value).toBe('foo')
|
||||||
|
expect(span.textContent).toBe('foo')
|
||||||
|
|
||||||
|
expect(
|
||||||
|
(deprecationData[DeprecationTypes.COMPONENT_V_MODEL].message as Function)(
|
||||||
|
CustomInput
|
||||||
|
)
|
||||||
|
).toHaveBeenWarned()
|
||||||
|
|
||||||
|
input.value = 'bar'
|
||||||
|
triggerEvent(input, 'input')
|
||||||
|
await nextTick()
|
||||||
|
|
||||||
|
expect(input.value).toBe('bar')
|
||||||
|
expect(span.textContent).toBe('bar')
|
||||||
|
|
||||||
|
vm.text = 'baz'
|
||||||
|
await nextTick()
|
||||||
|
expect(input.value).toBe('baz')
|
||||||
|
expect(span.textContent).toBe('baz')
|
||||||
|
}
|
||||||
|
|
||||||
|
test('basic usage', async () => {
|
||||||
|
await runTest({
|
||||||
|
name: 'CustomInput',
|
||||||
|
props: ['value'],
|
||||||
|
template: `<input :value="value" @input="$emit('input', $event.target.value)">`
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
test('with model option', async () => {
|
||||||
|
await runTest({
|
||||||
|
name: 'CustomInput',
|
||||||
|
props: ['input'],
|
||||||
|
model: {
|
||||||
|
prop: 'input',
|
||||||
|
event: 'update'
|
||||||
|
},
|
||||||
|
template: `<input :value="input" @input="$emit('update', $event.target.value)">`
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
@ -1,5 +1,6 @@
|
|||||||
import Vue from '@vue/compat'
|
import Vue from '@vue/compat'
|
||||||
import { toggleDeprecationWarning } from '../compatConfig'
|
import { toggleDeprecationWarning } from '../compatConfig'
|
||||||
|
import { triggerEvent } from './utils'
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
toggleDeprecationWarning(false)
|
toggleDeprecationWarning(false)
|
||||||
@ -11,18 +12,6 @@ afterEach(() => {
|
|||||||
toggleDeprecationWarning(false)
|
toggleDeprecationWarning(false)
|
||||||
})
|
})
|
||||||
|
|
||||||
function triggerEvent(
|
|
||||||
target: Element,
|
|
||||||
event: string,
|
|
||||||
process?: (e: any) => any
|
|
||||||
) {
|
|
||||||
const e = document.createEvent('HTMLEvents')
|
|
||||||
e.initEvent(event, true, true)
|
|
||||||
if (process) process(e)
|
|
||||||
target.dispatchEvent(e)
|
|
||||||
return e
|
|
||||||
}
|
|
||||||
|
|
||||||
// only testing config options that affect runtime behavior.
|
// only testing config options that affect runtime behavior.
|
||||||
|
|
||||||
test('GLOBAL_KEY_CODES', () => {
|
test('GLOBAL_KEY_CODES', () => {
|
||||||
|
@ -5,6 +5,7 @@ import {
|
|||||||
deprecationData,
|
deprecationData,
|
||||||
toggleDeprecationWarning
|
toggleDeprecationWarning
|
||||||
} from '../compatConfig'
|
} from '../compatConfig'
|
||||||
|
import { triggerEvent } from './utils'
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
toggleDeprecationWarning(true)
|
toggleDeprecationWarning(true)
|
||||||
@ -19,18 +20,6 @@ afterEach(() => {
|
|||||||
Vue.configureCompat({ MODE: 3 })
|
Vue.configureCompat({ MODE: 3 })
|
||||||
})
|
})
|
||||||
|
|
||||||
function triggerEvent(
|
|
||||||
target: Element,
|
|
||||||
event: string,
|
|
||||||
process?: (e: any) => any
|
|
||||||
) {
|
|
||||||
const e = document.createEvent('HTMLEvents')
|
|
||||||
e.initEvent(event, true, true)
|
|
||||||
if (process) process(e)
|
|
||||||
target.dispatchEvent(e)
|
|
||||||
return e
|
|
||||||
}
|
|
||||||
|
|
||||||
test('WATCH_ARRAY', async () => {
|
test('WATCH_ARRAY', async () => {
|
||||||
const spy = jest.fn()
|
const spy = jest.fn()
|
||||||
const vm = new Vue({
|
const vm = new Vue({
|
||||||
|
11
packages/runtime-core/src/compat/__tests__/utils.ts
Normal file
11
packages/runtime-core/src/compat/__tests__/utils.ts
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
export function triggerEvent(
|
||||||
|
target: Element,
|
||||||
|
event: string,
|
||||||
|
process?: (e: any) => any
|
||||||
|
) {
|
||||||
|
const e = document.createEvent('HTMLEvents')
|
||||||
|
e.initEvent(event, true, true)
|
||||||
|
if (process) process(e)
|
||||||
|
target.dispatchEvent(e)
|
||||||
|
return e
|
||||||
|
}
|
@ -37,7 +37,7 @@ import {
|
|||||||
DeprecationTypes,
|
DeprecationTypes,
|
||||||
isCompatEnabled
|
isCompatEnabled
|
||||||
} from './compatConfig'
|
} from './compatConfig'
|
||||||
import { compatModelEventPrefix } from './vModel'
|
import { compatModelEventPrefix } from './componentVModel'
|
||||||
|
|
||||||
const v3CompiledRenderFnRE = /^(?:function \w+)?\(_ctx, _cache/
|
const v3CompiledRenderFnRE = /^(?:function \w+)?\(_ctx, _cache/
|
||||||
|
|
||||||
|
@ -22,7 +22,10 @@ import { UnionToIntersection } from './helpers/typeUtils'
|
|||||||
import { devtoolsComponentEmit } from './devtools'
|
import { devtoolsComponentEmit } from './devtools'
|
||||||
import { AppContext } from './apiCreateApp'
|
import { AppContext } from './apiCreateApp'
|
||||||
import { emit as compatInstanceEmit } from './compat/instanceEventEmitter'
|
import { emit as compatInstanceEmit } from './compat/instanceEventEmitter'
|
||||||
import { compatModelEventPrefix, compatModelEmit } from './compat/vModel'
|
import {
|
||||||
|
compatModelEventPrefix,
|
||||||
|
compatModelEmit
|
||||||
|
} from './compat/componentVModel'
|
||||||
|
|
||||||
export type ObjectEmitsOptions = Record<
|
export type ObjectEmitsOptions = Record<
|
||||||
string,
|
string,
|
||||||
|
@ -42,7 +42,7 @@ import { NULL_DYNAMIC_COMPONENT } from './helpers/resolveAssets'
|
|||||||
import { hmrDirtyComponents } from './hmr'
|
import { hmrDirtyComponents } from './hmr'
|
||||||
import { setCompiledSlotRendering } from './helpers/renderSlot'
|
import { setCompiledSlotRendering } from './helpers/renderSlot'
|
||||||
import { convertLegacyComponent } from './compat/component'
|
import { convertLegacyComponent } from './compat/component'
|
||||||
import { convertLegacyVModelProps } from './compat/vModel'
|
import { convertLegacyVModelProps } from './compat/componentVModel'
|
||||||
import { defineLegacyVNodeProperties } from './compat/renderFn'
|
import { defineLegacyVNodeProperties } from './compat/renderFn'
|
||||||
import { convertLegacyRefInFor } from './compat/ref'
|
import { convertLegacyRefInFor } from './compat/ref'
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user