From 5758f7b8df5e97d3a4644bbf58eb1d7c19677a32 Mon Sep 17 00:00:00 2001 From: dlindenkreuz Date: Thu, 21 May 2020 00:52:34 +0200 Subject: [PATCH 1/3] fix: delete wrappers before destroying `wrapper.destroy()` will rethrow any errors via vue test utils `throwIfInstancesThrew`. ensure that wrappers are deleted from mountedWrappers at any time --- src/vue-testing-library.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/vue-testing-library.js b/src/vue-testing-library.js index 00df697b..5de7f5fb 100644 --- a/src/vue-testing-library.js +++ b/src/vue-testing-library.js @@ -97,9 +97,11 @@ function cleanupAtWrapper(wrapper) { document.body.removeChild(wrapper.element.parentNode) } - wrapper.destroy() - - mountedWrappers.delete(wrapper) + try { + wrapper.destroy() + } finally { + mountedWrappers.delete(wrapper) + } } // Vue Testing Library's version of fireEvent will call DOM Testing Library's From ce041cc3a0c8262018011af6e61ba0a0322747da Mon Sep 17 00:00:00 2001 From: dlindenkreuz Date: Thu, 21 May 2020 01:24:41 +0200 Subject: [PATCH 2/3] test: add tests for re-throwing async lifecycle hooks --- src/__tests__/cleanup-throw.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/__tests__/cleanup-throw.js diff --git a/src/__tests__/cleanup-throw.js b/src/__tests__/cleanup-throw.js new file mode 100644 index 00000000..9872ab04 --- /dev/null +++ b/src/__tests__/cleanup-throw.js @@ -0,0 +1,19 @@ +import {render, cleanup} from '@testing-library/vue' +import Vue from 'vue' + +test('cleanup re-throws errors from async lifecycle hooks', async () => { + const err = new Error('foo') + render({ + async mounted() { + await new Promise((resolve, reject) => reject(err)) + }, + template: `

Hello World

`, + }) + // thrown errors are logged redundantly by vue-test-utils injected Vue.config.errorHandler + // mute console + const spy = jest.spyOn(console, 'error').mockImplementation(() => {}) + await Vue.nextTick() + expect(cleanup).toThrow(err) + // unmute console + spy.mockReset() +}) From 00e68adcac81b3e6eeae83ac3286b82f700eef5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A0=20Fontcuberta?= Date: Sat, 6 Jun 2020 17:37:26 +0200 Subject: [PATCH 3/3] Update src/__tests__/cleanup-throw.js --- src/__tests__/cleanup-throw.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/__tests__/cleanup-throw.js b/src/__tests__/cleanup-throw.js index 9872ab04..6bb1a439 100644 --- a/src/__tests__/cleanup-throw.js +++ b/src/__tests__/cleanup-throw.js @@ -12,8 +12,10 @@ test('cleanup re-throws errors from async lifecycle hooks', async () => { // thrown errors are logged redundantly by vue-test-utils injected Vue.config.errorHandler // mute console const spy = jest.spyOn(console, 'error').mockImplementation(() => {}) + await Vue.nextTick() expect(cleanup).toThrow(err) + // unmute console spy.mockReset() })