From b7621983f497ce196aca50f235312ff418283fdf Mon Sep 17 00:00:00 2001 From: Jerome De Leon <32805276+JeromeDeLeon@users.noreply.github.com> Date: Tue, 24 Nov 2020 22:06:43 +0800 Subject: [PATCH] feat: Add support for input file on `fireEvent.update` (#179) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add input file fail test * fix incorrect render * add input file to update fireEvent * Update based on suggestion Co-authored-by: Adrià Fontcuberta --- src/__tests__/fire-event.js | 21 +++++++++++++++++++++ src/vue-testing-library.js | 2 ++ 2 files changed, 23 insertions(+) diff --git a/src/__tests__/fire-event.js b/src/__tests__/fire-event.js index 668ca551..d91d4383 100644 --- a/src/__tests__/fire-event.js +++ b/src/__tests__/fire-event.js @@ -119,6 +119,7 @@ const eventTypes = [ elementType: 'div', }, ] + beforeEach(() => { jest.spyOn(console, 'warn').mockImplementation(() => {}) }) @@ -215,6 +216,26 @@ test('fireEvent.update does not trigger warning messages', async () => { expect(console.warn).not.toHaveBeenCalled() }) +test('fireEvent.update should not crash with input file', async () => { + const {getByTestId} = render({ + template: ``, + }) + + const file = new File(['(⌐□_□)'], 'chucknorris.png', {type: 'image/png'}) + + const inputEl = getByTestId('test-update') + + // You could replace the lines below with + // userEvent.upload(inputEl, file) + Object.defineProperty(inputEl, 'files', { + value: [file], + }) + + await fireEvent.update(inputEl) + + expect(console.warn).not.toHaveBeenCalled() +}) + test('fireEvent.update does not crash if non-input element is passed in', async () => { const {getByText} = render({ template: `
Hi
`, diff --git a/src/vue-testing-library.js b/src/vue-testing-library.js index 185ff418..8c190dd8 100644 --- a/src/vue-testing-library.js +++ b/src/vue-testing-library.js @@ -158,6 +158,8 @@ fireEvent.update = (elem, value) => { if (['checkbox', 'radio'].includes(type)) { elem.checked = true return fireEvent.change(elem) + } else if (type === 'file') { + return fireEvent.change(elem) } else { elem.value = value if (elem._vModifiers && elem._vModifiers.lazy) {