import Vue from '@vue/compat' import { nextTick } from '../../runtime-core/src/scheduler' import { DeprecationTypes, deprecationData, toggleDeprecationWarning, } from '../../runtime-core/src/compat/compatConfig' beforeEach(() => { toggleDeprecationWarning(true) Vue.configureCompat({ MODE: 2, GLOBAL_MOUNT: 'suppress-warning', GLOBAL_EXTEND: 'suppress-warning', }) }) afterEach(() => { toggleDeprecationWarning(false) Vue.configureCompat({ MODE: 3 }) }) test('root data plain object', () => { const vm = new Vue({ data: { foo: 1 } as any, template: `{{ foo }}`, }).$mount() expect(vm.$el.textContent).toBe('1') expect( deprecationData[DeprecationTypes.OPTIONS_DATA_FN].message, ).toHaveBeenWarned() }) test('data deep merge', () => { const mixin = { data() { return { foo: { baz: 2, }, } }, } const vm = new Vue({ mixins: [mixin], data: () => ({ foo: { bar: 1, }, selfData: 3, }), template: `{{ { selfData, foo } }}`, }).$mount() expect(vm.$el.textContent).toBe( JSON.stringify({ selfData: 3, foo: { baz: 2, bar: 1 } }, null, 2), ) expect( (deprecationData[DeprecationTypes.OPTIONS_DATA_MERGE].message as Function)( 'foo', ), ).toHaveBeenWarned() }) // #3852 test('data deep merge w/ extended constructor', () => { const App = Vue.extend({ template: `
{{ { mixinData, selfData } }}`,
mixins: [{ data: () => ({ mixinData: 'mixinData' }) }],
data: () => ({ selfData: 'selfData' }),
})
const vm = new App().$mount()
expect(vm.$el.textContent).toBe(
JSON.stringify(
{
mixinData: 'mixinData',
selfData: 'selfData',
},
null,
2,
),
)
})
test('beforeDestroy/destroyed', async () => {
const beforeDestroy = vi.fn()
const destroyed = vi.fn()
const child = {
template: `foo`,
beforeDestroy,
destroyed,
}
const vm = new Vue({
template: `