Skip to content

Commit

Permalink
chore(mount): simplify mount operation
Browse files Browse the repository at this point in the history
* do not use ugly console.warn hack
  • Loading branch information
xanf committed Nov 3, 2022
1 parent b881c10 commit a3a58e1
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 7 deletions.
15 changes: 9 additions & 6 deletions src/mount.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ import {
ComponentOptions,
ConcreteComponent,
Prop,
transformVNodeArgs
transformVNodeArgs,
ref
} from 'vue'

import { MountingOptions, Slot } from './types'
Expand Down Expand Up @@ -432,9 +433,15 @@ export function mount(
component.components = { ...component.components, ...global.components }
}

const componentRef = ref(null)
// create the wrapper component
const Parent = defineComponent({
name: 'VTU_ROOT',
setup() {
return {
[MOUNT_COMPONENT_REF]: componentRef
}
},
render() {
return h(component as ComponentOptions, { ...props, ...refs }, slots)
}
Expand Down Expand Up @@ -562,16 +569,12 @@ export function mount(
const vm = app.mount(el)

// Ignore "Avoid app logic that relies on enumerating keys on a component instance..." warning
const warnSave = console.warn
console.warn = () => {}

const appRef = vm.$refs[MOUNT_COMPONENT_REF] as ComponentPublicInstance
const appRef = componentRef.value! as ComponentPublicInstance
// we add `hasOwnProperty` so Jest can spy on the proxied vm without throwing
// note that this is not necessary with Jest v27+ or Vitest, but is kept for compatibility with older Jest versions
appRef.hasOwnProperty = (property) => {
return Reflect.has(appRef, property)
}
console.warn = warnSave
const wrapper = createVueWrapper(app, appRef, setProps)
trackInstance(wrapper)
return wrapper
Expand Down
2 changes: 1 addition & 1 deletion tests/shallowMount.spec.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { describe, expect, it } from 'vitest'
import { defineAsyncComponent, defineComponent } from 'vue'
import { defineAsyncComponent, defineComponent, onMounted } from 'vue'
import { mount, shallowMount, VueWrapper } from '../src'
import ComponentWithChildren from './components/ComponentWithChildren.vue'
import ScriptSetupWithChildren from './components/ScriptSetupWithChildren.vue'
Expand Down

0 comments on commit a3a58e1

Please sign in to comment.