-
-
Notifications
You must be signed in to change notification settings - Fork 2.4k
/
index.test.ts
83 lines (67 loc) · 2.12 KB
/
index.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import { describe, expect, it } from 'vitest'
import { mount } from '@vue/test-utils'
import type { Slot } from 'vue-demi'
import { Fragment, defineComponent, h, isVue2, renderSlot } from 'vue-demi'
import { createReusableTemplate } from '.'
describe.skipIf(isVue2)('createReusableTemplate', () => {
it('should work', () => {
const [DefineFoo, ReuseFoo] = createReusableTemplate()
const [DefineBar, ReuseBar] = createReusableTemplate()
const Zig = createReusableTemplate()
const wrapper = mount({
render() {
return h(Fragment, null, [
h(DefineFoo, () => ['Foo']),
h(ReuseFoo),
h(DefineBar, () => ['Bar']),
h(Zig.define, () => ['Zig']),
h(ReuseFoo),
h(ReuseBar),
h(Zig.reuse),
])
},
})
expect(wrapper.text()).toBe('FooFooBarZig')
})
it('nested', () => {
const CompA = defineComponent((_, { slots }) => {
return () => renderSlot(slots, 'default')
})
const [DefineFoo, ReuseFoo] = createReusableTemplate()
const wrapper = mount({
render() {
return h(Fragment, null, [
h(DefineFoo, () => ['Foo']),
h(CompA, () => h(ReuseFoo)),
])
},
})
expect(wrapper.text()).toBe('Foo')
})
it('props', () => {
const [DefineFoo, ReuseFoo] = createReusableTemplate<{ msg: string }>()
const wrapper = mount({
render() {
return h(Fragment, null, [
h(DefineFoo, ({ $slots, ...args }: any) => h('pre', JSON.stringify(args))),
h(ReuseFoo, { msg: 'Foo' }),
h(ReuseFoo, { msg: 'Bar' }),
])
},
})
expect(wrapper.text()).toBe('{"msg":"Foo"}{"msg":"Bar"}')
})
it('slots', () => {
const [DefineFoo, ReuseFoo] = createReusableTemplate<{ msg: string }, { default: Slot }>()
const wrapper = mount({
render() {
return h(Fragment, null, [
h(DefineFoo, (args: any) => args.$slots.default?.()),
h(ReuseFoo, () => h('div', 'Goodbye')),
h(ReuseFoo, () => h('div', 'Hi')),
])
},
})
expect(wrapper.text()).toBe('GoodbyeHi')
})
})