Skip to content

Commit 9c2ad02

Browse files
authored
fix: attach emit listener after createApp is called (#437)
* fix: attach emit listener after createApp is called * chore: lint
1 parent c667907 commit 9c2ad02

File tree

4 files changed

+120
-9
lines changed

4 files changed

+120
-9
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"@rollup/plugin-replace": "^2.4.1",
2222
"@types/jest": "26.0.20",
2323
"@types/node": "14.14.31",
24-
"@vue/compiler-sfc": "3.0.6",
24+
"@vue/compiler-sfc": "3.0.7",
2525
"babel-jest": "^26.6.3",
2626
"babel-preset-jest": "^26.6.2",
2727
"dom-event-types": "^1.0.0",
@@ -38,7 +38,7 @@
3838
"tsd": "0.14.0",
3939
"typescript": "^4.2.2",
4040
"vitepress": "^0.12.2",
41-
"vue": "3.0.6",
41+
"vue": "3.0.7",
4242
"vue-class-component": "^8.0.0-rc.1",
4343
"vue-jest": "^5.0.0-alpha.8",
4444
"vue-router": "^4.0.4",

src/mount.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -337,12 +337,13 @@ export function mount(
337337
return vm.$nextTick()
338338
}
339339

340-
// add tracking for emitted events
341-
attachEmitListener()
342-
343340
// create the app
344341
const app = createApp(Parent)
345342

343+
// add tracking for emitted events
344+
// this must be done after `createApp`: https://github.com/vuejs/vue-test-utils-next/issues/436
345+
attachEmitListener()
346+
346347
// global mocks mixin
347348
if (global?.mocks) {
348349
const mixin = {

tests/emit.spec.ts

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ describe('emitted', () => {
2121
console.warn = consoleWarnSave
2222
})
2323

24-
it('captures events emitted via this.$emit', () => {
24+
it('captures events emitted via this.$emit', async () => {
2525
const Component = defineComponent({
2626
render() {
2727
return h('div', [
@@ -33,7 +33,7 @@ describe('emitted', () => {
3333
expect(wrapper.emitted()).toEqual({})
3434
expect(wrapper.emitted().hello).toEqual(undefined)
3535

36-
wrapper.find('button').trigger('click')
36+
await wrapper.find('button').trigger('click')
3737
expect(wrapper.emitted().hello[0]).toEqual(['foo', 'bar'])
3838

3939
wrapper.find('button').trigger('click')
@@ -274,4 +274,27 @@ describe('emitted', () => {
274274

275275
expect(wrapper.emitted().compositionstart).not.toBe(undefined)
276276
})
277+
278+
it('https://github.com/vuejs/vue-test-utils-next/issues/436', async () => {
279+
const Foo = defineComponent({
280+
name: 'Foo',
281+
emits: ['foo'],
282+
setup(_, ctx) {
283+
return () =>
284+
h(
285+
'div',
286+
{
287+
onClick: () => {
288+
ctx.emit('foo', 'bar')
289+
}
290+
},
291+
'hello world'
292+
)
293+
}
294+
})
295+
296+
const wrapper = mount(Foo)
297+
await wrapper.trigger('click')
298+
expect(wrapper.emitted('foo')).toHaveLength(1)
299+
})
277300
})

yarn.lock

Lines changed: 89 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1508,6 +1508,17 @@
15081508
estree-walker "^2.0.1"
15091509
source-map "^0.6.1"
15101510

1511+
1512+
version "3.0.7"
1513+
resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.0.7.tgz#421782a4c67cc3f2b7c30457ef446d74f8524f74"
1514+
integrity sha512-JFohgBXoyUc3mdeI2WxlhjQZ5fakfemJkZHX8Gu/nFbEg3+lKVUZmNKWmmnp9aOzJQZKoj77LjmFxiP+P+7lMQ==
1515+
dependencies:
1516+
"@babel/parser" "^7.12.0"
1517+
"@babel/types" "^7.12.0"
1518+
"@vue/shared" "3.0.7"
1519+
estree-walker "^2.0.1"
1520+
source-map "^0.6.1"
1521+
15111522
15121523
version "3.0.5"
15131524
resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.0.5.tgz#7885a13e6d18f64dde8ebceec052ed2c102696c2"
@@ -1524,7 +1535,37 @@
15241535
"@vue/compiler-core" "3.0.6"
15251536
"@vue/shared" "3.0.6"
15261537

1527-
"@vue/[email protected]", "@vue/compiler-sfc@^3.0.5":
1538+
1539+
version "3.0.7"
1540+
resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.0.7.tgz#54d2e12fb9a7aff53abd19dac2c2679533f0c919"
1541+
integrity sha512-VnIH9EbWQm/Tkcp+8dCaNVsVvhm/vxCrIKWRkXY9215hTqOqQOvejT8IMjd2kc++nIsYMsdQk6H9qqBvoLe/Cw==
1542+
dependencies:
1543+
"@vue/compiler-core" "3.0.7"
1544+
"@vue/shared" "3.0.7"
1545+
1546+
1547+
version "3.0.7"
1548+
resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.0.7.tgz#900414750cc726553b870490f48073451fd14f07"
1549+
integrity sha512-37/QILpGE+J3V+bP9Slg9e6xGqfk+MmS2Yj8ChR4fS0/qWUU/YoYHE0GPIzjmBdH0JVOOmJqunxowIXmqNiHng==
1550+
dependencies:
1551+
"@babel/parser" "^7.12.0"
1552+
"@babel/types" "^7.12.0"
1553+
"@vue/compiler-core" "3.0.7"
1554+
"@vue/compiler-dom" "3.0.7"
1555+
"@vue/compiler-ssr" "3.0.7"
1556+
"@vue/shared" "3.0.7"
1557+
consolidate "^0.16.0"
1558+
estree-walker "^2.0.1"
1559+
hash-sum "^2.0.0"
1560+
lru-cache "^5.1.1"
1561+
magic-string "^0.25.7"
1562+
merge-source-map "^1.1.0"
1563+
postcss "^8.1.10"
1564+
postcss-modules "^4.0.0"
1565+
postcss-selector-parser "^6.0.4"
1566+
source-map "^0.6.1"
1567+
1568+
"@vue/compiler-sfc@^3.0.5":
15281569
version "3.0.6"
15291570
resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.0.6.tgz#3945f73a93d52868799f1e332a75bb8849976ac9"
15301571
integrity sha512-g1tkswnhtiJpj4ELQ3SzeGxtOd0t8E5GkT+n2VlElEnTI1BzueSvr41D5QthnUS+TNWZd52ZnPtdaNz+Lfum1w==
@@ -1562,13 +1603,28 @@
15621603
"@vue/compiler-dom" "3.0.6"
15631604
"@vue/shared" "3.0.6"
15641605

1606+
1607+
version "3.0.7"
1608+
resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.0.7.tgz#28b85d497381d75fe44234057b140b0065ca9dbf"
1609+
integrity sha512-nHRbHeSpfXwjypettjrA16TjgfDcPEwq3m/zHnGyLC1QqdLtklXmpSM43/CPwwTCRa/qdt0pldJf22MiCEuTSQ==
1610+
dependencies:
1611+
"@vue/compiler-dom" "3.0.7"
1612+
"@vue/shared" "3.0.7"
1613+
15651614
15661615
version "3.0.6"
15671616
resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.0.6.tgz#7b16f3d5d04cc55028085fff0bb8475cc0e32991"
15681617
integrity sha512-hX8PnZayNMoljWSYrZW0OclQnRaMoHxvi5eeFVFPDr7+tzBeiftmmozKttxxCLoDxBWX1B4gNc237DIcYU63Lw==
15691618
dependencies:
15701619
"@vue/shared" "3.0.6"
15711620

1621+
1622+
version "3.0.7"
1623+
resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.0.7.tgz#e6ccc7bef7fc10b0972e4d974bad71679d3b26ad"
1624+
integrity sha512-FotWcNNaKhqpFZrdgsUOZ1enlJ5lhTt01CNTtLSyK7jYFgZBTuw8vKsEutZKDYZ1XKotOfoeO8N3pZQqmM6Etw==
1625+
dependencies:
1626+
"@vue/shared" "3.0.7"
1627+
15721628
15731629
version "3.0.6"
15741630
resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.0.6.tgz#d16779b5664593f1d25be677fb1b1968024aa532"
@@ -1577,6 +1633,14 @@
15771633
"@vue/reactivity" "3.0.6"
15781634
"@vue/shared" "3.0.6"
15791635

1636+
1637+
version "3.0.7"
1638+
resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.0.7.tgz#d44c0b0a57d7e392912a87362a4430ccf446ecea"
1639+
integrity sha512-DBAZAwVvdmMXuyd6/9qqj/kYr/GaLTmn1L2/QLxLwP+UfhIboiTSBc/tUUb8MRk7Bb98GzNeAWkkT6AfooS3dQ==
1640+
dependencies:
1641+
"@vue/reactivity" "3.0.7"
1642+
"@vue/shared" "3.0.7"
1643+
15801644
15811645
version "3.0.6"
15821646
resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.0.6.tgz#e7d6c61913d871f1f020a9a81b558c8fcbeba8c6"
@@ -1586,6 +1650,15 @@
15861650
"@vue/shared" "3.0.6"
15871651
csstype "^2.6.8"
15881652

1653+
1654+
version "3.0.7"
1655+
resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.0.7.tgz#b70668d729020bc4ad608c20367223f259576ba6"
1656+
integrity sha512-Oij4ruOtnpQpCj+/Q3JPzgpTJ1Q7+N67pA53A8KVITEtxfvKL46NN6dhAZ5NGqwX6RWZpYqWQNewITeF0pHr8g==
1657+
dependencies:
1658+
"@vue/runtime-core" "3.0.7"
1659+
"@vue/shared" "3.0.7"
1660+
csstype "^2.6.8"
1661+
15891662
"@vue/server-renderer@^3.0.5":
15901663
version "3.0.5"
15911664
resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.0.5.tgz#1197e7d7b7874e15de284798a3932ec425ffe593"
@@ -1604,6 +1677,11 @@
16041677
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.0.6.tgz#d65576430fc4ad383dc7c829118798e5169178d4"
16051678
integrity sha512-c37C60HpelUZIx+SNZVEINSxkFzQYhIXFg5AynnIA4QDBmY4iSPoACfGSwSUTCTKImukPeCgY2oqRJVP3R1Mnw==
16061679

1680+
1681+
version "3.0.7"
1682+
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.0.7.tgz#96d52988efc07444c108c7c6803ba7cc93e40045"
1683+
integrity sha512-dn5FyfSc4ky424jH4FntiHno7Ss5yLkqKNmM/NXwANRnlkmqu74pnGetexDFVG5phMk9/FhwovUZCWGxsotVKg==
1684+
16071685
abab@^2.0.0, abab@^2.0.3:
16081686
version "2.0.5"
16091687
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
@@ -6572,7 +6650,16 @@ vue-router@^4.0.4:
65726650
resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.0.4.tgz#ad9b4b7bbdad622407b4ff189b1646f48c1e9053"
65736651
integrity sha512-uN6PDEaYdU9aRO7mU+Dkr1uaY49hV3fucEDG/Vre/Qj8ct3RoJS16vcPrvKVzn69zDDjBV5b9Xw7fZA9r6b/Iw==
65746652

6575-
[email protected], vue@^3.0.5:
6653+
6654+
version "3.0.7"
6655+
resolved "https://registry.yarnpkg.com/vue/-/vue-3.0.7.tgz#8bcff51f8be570f9e4ce8cc5f52e2ab0fe3c74a1"
6656+
integrity sha512-8h4TikD+JabbMK9aRlBO4laG0AtNHRPHynxYgWZ9sq1YUPfzynd9Jeeb27XNyZytC7aCQRX9xe1+TQJuc181Tw==
6657+
dependencies:
6658+
"@vue/compiler-dom" "3.0.7"
6659+
"@vue/runtime-dom" "3.0.7"
6660+
"@vue/shared" "3.0.7"
6661+
6662+
vue@^3.0.5:
65766663
version "3.0.6"
65776664
resolved "https://registry.yarnpkg.com/vue/-/vue-3.0.6.tgz#2c16ed4bb66f16d6c6f6eaa3b7d5835a76598049"
65786665
integrity sha512-fgjbe/+f1EsqG7ZbaFSnxdzQXF2DKoFCdJlPxZZJy9XMtyXS6SY8pGzLi8WYb4zmsPLHvTZz4bHW30kFDk7vfA==

0 commit comments

Comments
 (0)