| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import Vue from '@vue/compat'
- import { ComponentOptions } from '../../runtime-core/src/component'
- import { nextTick } from '../../runtime-core/src/scheduler'
- import {
- DeprecationTypes,
- deprecationData,
- toggleDeprecationWarning
- } from '../../runtime-core/src/compat/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)">`
- })
- })
- })
|