From 44a93ae5565fc87b3ee5ccc25f3e464fb0d20490 Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Fri, 10 Jun 2022 20:29:42 +0200 Subject: [PATCH] Migrated CopyToClipboard test to react testing library --- config/jest/setupTests.ts | 1 + test/utils/CopyToClipboardIcon.test.tsx | 39 ++++++++++--------- .../CopyToClipboardIcon.test.tsx.snap | 21 ++++++++++ 3 files changed, 43 insertions(+), 18 deletions(-) create mode 100644 test/utils/__snapshots__/CopyToClipboardIcon.test.tsx.snap diff --git a/config/jest/setupTests.ts b/config/jest/setupTests.ts index 5893b1ca..cec71a7a 100644 --- a/config/jest/setupTests.ts +++ b/config/jest/setupTests.ts @@ -4,4 +4,5 @@ import ResizeObserver from 'resize-observer-polyfill'; (global as any).ResizeObserver = ResizeObserver; (global as any).scrollTo = () => {}; +(global as any).prompt = () => {}; (global as any).matchMedia = (media: string) => ({ matches: false, media }); diff --git a/test/utils/CopyToClipboardIcon.test.tsx b/test/utils/CopyToClipboardIcon.test.tsx index f286e724..23cfb1c4 100644 --- a/test/utils/CopyToClipboardIcon.test.tsx +++ b/test/utils/CopyToClipboardIcon.test.tsx @@ -1,27 +1,30 @@ -import { shallow, ShallowWrapper } from 'enzyme'; -import CopyToClipboard from 'react-copy-to-clipboard'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { faCopy as copyIcon } from '@fortawesome/free-regular-svg-icons'; +import { render } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; import { CopyToClipboardIcon } from '../../src/utils/CopyToClipboardIcon'; describe('', () => { - let wrapper: ShallowWrapper; - const onCopy = () => {}; - - beforeEach(() => { - wrapper = shallow(); + const onCopy = jest.fn(); + const setUp = (text = 'foo') => ({ + user: userEvent.setup(), + ...render(), }); - afterEach(() => wrapper?.unmount()); + + afterEach(jest.clearAllMocks); it('wraps expected components', () => { - const copyToClipboard = wrapper.find(CopyToClipboard); - const icon = wrapper.find(FontAwesomeIcon); + const { container } = setUp(); + expect(container).toMatchSnapshot(); + }); - expect(copyToClipboard).toHaveLength(1); - expect(copyToClipboard.prop('text')).toEqual('foo'); - expect(copyToClipboard.prop('onCopy')).toEqual(onCopy); - expect(icon).toHaveLength(1); - expect(icon.prop('icon')).toEqual(copyIcon); - expect(icon.prop('className')).toEqual('ms-2 copy-to-clipboard-icon'); + it.each([ + ['text'], + ['bar'], + ['baz'], + ])('copies content to clipboard when clicked', async (text) => { + const { user, container } = setUp(text); + + expect(onCopy).not.toHaveBeenCalled(); + container.firstElementChild && await user.click(container.firstElementChild); + expect(onCopy).toHaveBeenCalledWith(text, false); }); }); diff --git a/test/utils/__snapshots__/CopyToClipboardIcon.test.tsx.snap b/test/utils/__snapshots__/CopyToClipboardIcon.test.tsx.snap new file mode 100644 index 00000000..de841e3e --- /dev/null +++ b/test/utils/__snapshots__/CopyToClipboardIcon.test.tsx.snap @@ -0,0 +1,21 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` wraps expected components 1`] = ` +
+ +
+`;