Skip to content

Commit

Permalink
test(react): upgrade to react 17 and remove enzyme
Browse files Browse the repository at this point in the history
- add react-testing-library
- upgrade jest/jsdom dependencies

Signed-off-by: Ashley Ryan <asryan@vmware.com>
  • Loading branch information
Ashley Ryan committed Mar 18, 2022
1 parent 8eef59a commit 0d00cd7
Show file tree
Hide file tree
Showing 92 changed files with 2,681 additions and 4,250 deletions.
27 changes: 17 additions & 10 deletions packages/core/docs/react.stories.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -106,20 +106,23 @@ so there may issues rendering and interacting with Clarity components.

`CdsFormGroup` and other Clarity components use the
[Intersection Observer API](https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API),
which [jsdom doesn't implement](https://github.com/jsdom/jsdom/issues/2032). It can be mocked if tests are failing:
which [jsdom doesn't implement](https://github.com/jsdom/jsdom/issues/2032).
It can be mocked in your jest setup file if tests are failing:

```javascript
window.IntersectionObserver = jest.fn().mockReturnValue({
observe: () => null,
unobserve: () => null,
disconnect: () => null,
});
if (typeof window !== 'undefined') {
const mockObserverAPI = () =>
jest.fn().mockReturnValue({
observe: jest.fn(),
unobserve: jest.fn(),
disconnect: jest.fn(),
});

window.ResizeObserver = mockObserverAPI();
window.IntersectionObserver = mockObserverAPI();
}
```

<a href="https://github.com/vmware-clarity/starters" target="_blank" rel="noopener">
<cds-button>Example Apps</cds-button>
</a>

### Finding a Clarity element

Because of the way web components are rendered, the synchronous
Expand All @@ -136,3 +139,7 @@ test('my test', async () => {
expect(await screen.findByRole('button', { name: 'My Button' })).toBeInTheDocument();
});
```

<a href="https://github.com/vmware-clarity/starters" target="_blank" rel="noopener">
<cds-button>Example Apps</cds-button>
</a>
4 changes: 2 additions & 2 deletions packages/react/jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ module.exports = {
roots: ['./'],
globals: {
'ts-jest': {
tsConfig: 'tsconfig.test.json',
tsconfig: 'tsconfig.test.json',
},
},
modulePathIgnorePatterns: ['<rootDir>/dist/'],
Expand All @@ -12,7 +12,7 @@ module.exports = {
'.*(utils/index.js)$': '<rootDir>/dist/react/utils/index.js',
},
setupFilesAfterEnv: ['./jest.setup.ts'],
snapshotSerializers: ['enzyme-to-json/serializer'],
testEnvironment: 'jest-environment-jsdom',
testMatch: ['**/__tests__/**/*.+(ts|tsx|js)', '**/?(*.)+(test).+(ts|tsx|js)'],
transform: {
'^.+\\.(js|jsx)$': 'babel-jest',
Expand Down
23 changes: 20 additions & 3 deletions packages/react/jest.setup.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,21 @@
import * as enzyme from 'enzyme';
import * as Adapter from 'enzyme-adapter-react-16';
import '@testing-library/jest-dom/extend-expect';

enzyme.configure({ adapter: new Adapter() });
if (typeof window !== 'undefined') {
// jsdom doesn't implment IntersectionObserver
// https://github.com/jsdom/jsdom/issues/2032
const mockObserverAPI = () =>
jest.fn().mockReturnValue({
observe: jest.fn(),
unobserve: jest.fn(),
disconnect: jest.fn(),
});

window.ResizeObserver = mockObserverAPI();
window.IntersectionObserver = mockObserverAPI();

// jsdom implements getBoundingClientRect, but not DOMRect
if (!window.DOMRect) {
const domRectMock = () => jest.fn().mockReturnValue({});
window.DOMRect = (domRectMock() as unknown) as typeof window.DOMRect;
}
}
30 changes: 14 additions & 16 deletions packages/react/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,36 +31,34 @@
"react-dom": ">= 16.13.1"
},
"devDependencies": {
"@cds/core": "./dist/core",
"@babel/core": "7.10.2",
"@babel/preset-env": "7.10.2",
"@types/enzyme": "^3.10.5",
"@types/enzyme-adapter-react-16": "^1.0.6",
"@types/jest": "^26.0.0",
"@cds/core": "./dist/core",
"@testing-library/dom": "^8.11.3",
"@testing-library/jest-dom": "^5.16.2",
"@testing-library/react": "^12.1.2",
"@testing-library/user-event": "^13.5.0",
"@types/jest": "^27.4.0",
"@types/node": "^14.0.5",
"@types/react": "^16.9.35",
"@types/react-dom": "^16.9.8",
"@types/react-test-renderer": "^16.9.2",
"@types/react": "^17.0.38",
"@types/react-dom": "^17.0.11",
"@typescript-eslint/eslint-plugin": "5.5.0",
"@typescript-eslint/parser": "5.5.0",
"babel-jest": "26.0.1",
"babel-jest": "^27.4.6",
"cpy-cli": "3.1.0",
"del-cli": "1.1.0",
"enzyme": "^3.11.0",
"enzyme-adapter-react-16": "^1.15.2",
"enzyme-to-json": "^3.5.0",
"eslint": "8.3.0",
"eslint-config-prettier": "8.3.0",
"jest": "^26.0.1",
"jest": "^27.4.7",
"lit": "2.0.2",
"npm-run-all": "4.1.5",
"parcel": "^2.0.0-beta.1",
"prettier": "2.0.5",
"pretty-quick": "1.11.0",
"react": "^16.13.1",
"react-dom": "^16.13.1",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"replace": "1.1.0",
"ts-jest": "^26.1.0",
"ts-jest": "^27.1.3",
"typescript": "^4.4.2"
},
"optionalDependencies": {
Expand All @@ -84,4 +82,4 @@
"bugs": {
"url": "https://github.com/vmware-clarity/core/issues"
}
}
}
60 changes: 16 additions & 44 deletions packages/react/src/accordion/__snapshots__/index.test.tsx.snap
Original file line number Diff line number Diff line change
Expand Up @@ -2,50 +2,22 @@

exports[`CdsAccordion snapshot 1`] = `
<div>
<CdsAccordion>
<CdsAccordion
l={null}
>
<cds-accordion
l={null}
<cds-accordion>
<cds-accordion-panel>
<cds-accordion-header
id="my-header"
slot="accordion-header"
>
<CdsAccordionPanel
expanded={true}
>
<CdsAccordionPanel
expanded={true}
l={null}
>
<cds-accordion-panel
l={null}
>
<CdsAccordionHeader>
<CdsAccordionHeader
l={null}
>
<cds-accordion-header
l={null}
>
Item 1
</cds-accordion-header>
</CdsAccordionHeader>
</CdsAccordionHeader>
<CdsAccordionContent>
<CdsAccordionContent
l={null}
>
<cds-accordion-content
l={null}
>
Content 1
</cds-accordion-content>
</CdsAccordionContent>
</CdsAccordionContent>
</cds-accordion-panel>
</CdsAccordionPanel>
</CdsAccordionPanel>
</cds-accordion>
</CdsAccordion>
</CdsAccordion>
Item 1
</cds-accordion-header>
<cds-accordion-content
id="my-content"
role="region"
slot="accordion-content"
>
Content 1
</cds-accordion-content>
</cds-accordion-panel>
</cds-accordion>
</div>
`;
45 changes: 21 additions & 24 deletions packages/react/src/accordion/index.test.tsx
Original file line number Diff line number Diff line change
@@ -1,35 +1,32 @@
import * as React from 'react';
import { mount, shallow } from 'enzyme';
import { render, screen } from '@testing-library/react';
import { CdsAccordion, CdsAccordionPanel, CdsAccordionHeader, CdsAccordionContent } from './index';

describe('CdsAccordion', () => {
it('renders', () => {
const wrapper = shallow(
<div>
<CdsAccordion>
<CdsAccordionPanel expanded>
<CdsAccordionHeader>Item 1</CdsAccordionHeader>
<CdsAccordionContent>Content 1</CdsAccordionContent>
</CdsAccordionPanel>
</CdsAccordion>
</div>
it('renders', async () => {
render(
<CdsAccordion>
<CdsAccordionPanel expanded>
<CdsAccordionHeader>Item 1</CdsAccordionHeader>
<CdsAccordionContent>Content 1</CdsAccordionContent>
</CdsAccordionPanel>
</CdsAccordion>
);
const renderedComponent = wrapper.find(CdsAccordion);
expect(renderedComponent.at(0).html()).toMatch(/Item 1/);
expect(renderedComponent.at(0).html()).toMatch(/Content 1/);

expect(await document.querySelector('cds-accordion')).toBeInTheDocument();
expect(await screen.findByText(/item 1/i)).toBeInTheDocument();
expect(await screen.findByText(/content 1/i)).toBeInTheDocument();
});

it('snapshot', () => {
const wrapper = mount(
<div>
<CdsAccordion>
<CdsAccordionPanel expanded>
<CdsAccordionHeader>Item 1</CdsAccordionHeader>
<CdsAccordionContent>Content 1</CdsAccordionContent>
</CdsAccordionPanel>
</CdsAccordion>
</div>
const { container } = render(
<CdsAccordion>
<CdsAccordionPanel expanded>
<CdsAccordionHeader id="my-header">Item 1</CdsAccordionHeader>
<CdsAccordionContent id="my-content">Content 1</CdsAccordionContent>
</CdsAccordionPanel>
</CdsAccordion>
);
expect(wrapper).toMatchSnapshot();
expect(container).toMatchSnapshot();
});
});
114 changes: 31 additions & 83 deletions packages/react/src/alert/__snapshots__/index.test.tsx.snap
Original file line number Diff line number Diff line change
Expand Up @@ -2,95 +2,43 @@

exports[`CdsAlert snapshot 1`] = `
<div>
<CdsAlert
status="success"
>
<CdsAlert
l={null}
status="success"
<div>
<cds-alert
aria-describedby="_75380t13p"
role="region"
>
<cds-alert
l={null}
>
Foo
</cds-alert>
</CdsAlert>
</CdsAlert>
<CdsAlertGroup
status="info"
>
<CdsAlertGroup
l={null}
status="info"
Foo
</cds-alert>
<cds-alert-group
role="region"
>
<cds-alert-group
l={null}
<cds-alert
aria-describedby="_dklm69g43"
role="region"
>
<CdsAlert
closable={true}
Bar
<cds-alert-actions
slot="actions"
>
<CdsAlert
closable={true}
l={null}
>
<cds-alert
l={null}
>
Bar
<CdsAlertActions>
<CdsAlertActions
l={null}
>
<cds-alert-actions
l={null}
>
Baz
</cds-alert-actions>
</CdsAlertActions>
</CdsAlertActions>
</cds-alert>
</CdsAlert>
</CdsAlert>
</cds-alert-group>
</CdsAlertGroup>
</CdsAlertGroup>
<CdsAlertGroup
type="banner"
>
<CdsAlertGroup
l={null}
type="banner"
Baz
</cds-alert-actions>
</cds-alert>
</cds-alert-group>
<cds-alert-group
role="region"
>
<cds-alert-group
l={null}
<cds-alert
aria-describedby="_8d5fvsv02"
role="region"
>
<CdsAlert
status="info"
Foobar
<cds-alert-actions
slot="actions"
>
<CdsAlert
l={null}
status="info"
>
<cds-alert
l={null}
>
Foobar
<CdsAlertActions>
<CdsAlertActions
l={null}
>
<cds-alert-actions
l={null}
>
Test
</cds-alert-actions>
</CdsAlertActions>
</CdsAlertActions>
</cds-alert>
</CdsAlert>
</CdsAlert>
</cds-alert-group>
</CdsAlertGroup>
</CdsAlertGroup>
Test
</cds-alert-actions>
</cds-alert>
</cds-alert-group>
</div>
</div>
`;

0 comments on commit 0d00cd7

Please sign in to comment.