Skip to content

Commit

Permalink
chore: debug
Browse files Browse the repository at this point in the history
  • Loading branch information
jaskang committed Jul 28, 2023
1 parent 2b02e71 commit 5646d5b
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 19 deletions.
17 changes: 17 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
// 想了解更多的信息, 请访问:https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Debug Current Test File",
"autoAttachChildProcesses": true,
"skipFiles": ["<node_internals>/**", "**/node_modules/**"],
"program": "${workspaceRoot}/node_modules/vitest/vitest.mjs",
"args": ["run", "${relativeFile}"],
"smartStep": true,
"console": "integratedTerminal"
}
]
}
2 changes: 2 additions & 0 deletions src/utils/vnode.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,8 @@ export function getRootElements(children: VNode[] = []) {

if (isTextNode(item) || isComponent(item) || isElement(item)) {
result.push(item)
} else if (isSlot(item)) {
result.push(...getAllElements(item.children.default?.()))
} else if (Array.isArray(item)) {
result.push(...getRootElements(item))
} else if (isFragment(item)) {
Expand Down
72 changes: 53 additions & 19 deletions test/utils.test.tsx
Original file line number Diff line number Diff line change
@@ -1,27 +1,61 @@
import { mount } from '@vue/test-utils'
import { defineComponent, type VNode } from 'vue'

import { getRootElements, isComponent, isElement } from '@/utils/vnode'
import { getRootElements, isElement } from '@/utils/vnode'

let vnodes: VNode[] = []
const ElementSlot = defineComponent((props, { slots }) => {
return () => {
const children = slots.default?.()
vnodes = getRootElements(children)
return children
}
})
describe('utils', () => {
it('creates a todo', () => {
describe('getRootElements', () => {
const ElementSlot = defineComponent({
name: 'ElementSlot',
setup(_, { slots, expose }) {
const vnodes: VNode[] = []
expose({ vnodes })
return () => {
const children = getRootElements(slots.default?.())
vnodes.push(...children)
return children
}
},
})
// it('element', () => {
// const wrapper = mount(
// defineComponent(props => () => (
// <ElementSlot>
// <div>Todo</div>
// <div>Todo</div>
// </ElementSlot>
// ))
// )

// const exposed = wrapper.getComponent(ElementSlot)!.getCurrentComponent().exposed || {}

// expect(exposed.vnodes).lengthOf(2)
// expect(isElement(exposed.vnodes[0])).toBe(true)
// expect(isElement(exposed.vnodes[1])).toBe(true)
// })
it('comp', () => {
const comp = defineComponent({
name: 'Comp',
template: '<div>Todo</div><div>Todo</div><slot/>',
})
const wrapper = mount(
defineComponent(props => () => (
<ElementSlot>
<div>Todo</div>
<div>Todo</div>
</ElementSlot>
))
defineComponent({
components: { comp },
setup() {
return () => (
<ElementSlot>
<comp>
<div>Todo</div>
</comp>
<div>Todo</div>
</ElementSlot>
)
},
})
)
expect(vnodes).lengthOf(2)
expect(isElement(vnodes[0])).toBe(true)
const exposed = wrapper.getComponent(ElementSlot)!.getCurrentComponent().exposed || {}
console.log(wrapper.html())
expect(exposed.vnodes).lengthOf(4)
expect(isElement(exposed.vnodes[0])).toBe(true)
expect(isElement(exposed.vnodes[1])).toBe(true)
})
})

0 comments on commit 5646d5b

Please sign in to comment.