| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- 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: `<pre>{{ { mixinData, selfData } }}</pre>`,
- 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: `<child v-if="ok"/>`,
- data() {
- return { ok: true }
- },
- components: { child },
- }).$mount() as any
- vm.ok = false
- await nextTick()
- expect(beforeDestroy).toHaveBeenCalled()
- expect(destroyed).toHaveBeenCalled()
- expect(
- deprecationData[DeprecationTypes.OPTIONS_BEFORE_DESTROY].message,
- ).toHaveBeenWarned()
- expect(
- deprecationData[DeprecationTypes.OPTIONS_DESTROYED].message,
- ).toHaveBeenWarned()
- })
- test('beforeDestroy/destroyed in Vue.extend components', async () => {
- const beforeDestroy = vi.fn()
- const destroyed = vi.fn()
- const child = Vue.extend({
- template: `foo`,
- beforeDestroy,
- destroyed,
- })
- const vm = new Vue({
- template: `<child v-if="ok"/>`,
- data() {
- return { ok: true }
- },
- components: { child },
- }).$mount() as any
- vm.ok = false
- await nextTick()
- expect(beforeDestroy).toHaveBeenCalled()
- expect(destroyed).toHaveBeenCalled()
- expect(
- deprecationData[DeprecationTypes.OPTIONS_BEFORE_DESTROY].message,
- ).toHaveBeenWarned()
- expect(
- deprecationData[DeprecationTypes.OPTIONS_DESTROYED].message,
- ).toHaveBeenWarned()
- })
|