Skip to content

Commit 9c35538

Browse files
Copilotjoshblack
andauthored
Migrate Avatar and AvatarStack tests from Jest to Vitest (#6293)
Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: joshblack <[email protected]> Co-authored-by: Josh Black <[email protected]>
1 parent 6d64e8a commit 9c35538

File tree

5 files changed

+57
-77
lines changed

5 files changed

+57
-77
lines changed

packages/react/jest.config.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ module.exports = {
1919
'<rootDir>/src/ActionList/',
2020
'<rootDir>/src/AnchoredOverlay/',
2121
'<rootDir>/src/Autocomplete/',
22+
'<rootDir>/src/Avatar/',
23+
'<rootDir>/src/AvatarStack/',
2224
'<rootDir>/src/Banner/',
2325
'<rootDir>/src/Blankslate/',
2426
'<rootDir>/src/Box/',
Lines changed: 32 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,48 @@
1+
import {describe, expect, it} from 'vitest'
2+
import {render, screen} from '@testing-library/react'
13
import {Avatar} from '..'
4+
import {ThemeProvider} from '../ThemeProvider'
25
import theme from '../theme'
3-
import {px, render, behavesAsComponent, checkExports} from '../utils/testing'
4-
import {render as HTMLRender, screen} from '@testing-library/react'
5-
import axe from 'axe-core'
66

77
describe('Avatar', () => {
8-
behavesAsComponent({
9-
Component: Avatar,
10-
options: {
11-
skipAs: true,
12-
},
13-
})
14-
15-
checkExports('Avatar', {
16-
default: Avatar,
17-
})
18-
198
it('should support `className` on the outermost element', () => {
209
const Element = () => <Avatar src="primer.png" className={'test-class-name'} />
21-
expect(HTMLRender(<Element />).container.firstChild).toHaveClass('test-class-name')
22-
})
23-
24-
it('should have no axe violations', async () => {
25-
const {container} = HTMLRender(<Avatar src="primer.png" />)
26-
const results = await axe.run(container)
27-
expect(results).toHaveNoViolations()
10+
expect(render(<Element />).container.firstChild).toHaveClass('test-class-name')
2811
})
2912

3013
it('renders small by default', () => {
3114
const size = 20
32-
const result = render(<Avatar src="primer.png" />)
33-
expect(result.props.width).toEqual(size)
34-
expect(result.props.height).toEqual(size)
15+
render(<Avatar src="primer.png" data-testid="avatar" />)
16+
const avatar = screen.getByTestId('avatar')
17+
expect(avatar).toHaveAttribute('width', size.toString())
18+
expect(avatar).toHaveAttribute('height', size.toString())
3519
})
3620

3721
it('respects the size prop', () => {
38-
const result = render(<Avatar size={40} src="primer.png" alt="github" />)
39-
expect(result.props.width).toEqual(40)
40-
expect(result.props.height).toEqual(40)
22+
render(<Avatar size={40} src="primer.png" alt="github" data-testid="avatar" />)
23+
const avatar = screen.getByTestId('avatar')
24+
expect(avatar).toHaveAttribute('width', '40')
25+
expect(avatar).toHaveAttribute('height', '40')
4126
})
4227

4328
it('passes through the src prop', () => {
44-
expect(render(<Avatar src="primer.png" alt="" />).props.src).toEqual('primer.png')
29+
render(<Avatar src="primer.png" alt="" data-testid="avatar" />)
30+
const avatar = screen.getByTestId('avatar')
31+
expect(avatar).toHaveAttribute('src', 'primer.png')
4532
})
4633

4734
it('respects margin props', () => {
48-
expect(render(<Avatar src="primer.png" alt="" sx={{m: 2}} />)).toHaveStyleRule('margin', px(theme.space[2]))
35+
render(
36+
<ThemeProvider theme={theme}>
37+
<Avatar src="primer.png" alt="" sx={{m: 2}} data-testid="avatar" />
38+
</ThemeProvider>,
39+
)
40+
const avatar = screen.getByTestId('avatar')
41+
expect(avatar).toHaveStyle(`margin: 8px`)
4942
})
5043

5144
it('should support the `style` prop without overriding internal styles', () => {
52-
HTMLRender(
45+
render(
5346
<Avatar
5447
data-testid="avatar"
5548
src="primer.png"
@@ -59,9 +52,14 @@ describe('Avatar', () => {
5952
/>,
6053
)
6154

62-
expect(screen.getByTestId('avatar')).toHaveStyle({
63-
background: 'black',
64-
['--avatarSize-regular']: '20px',
65-
})
55+
const avatar = screen.getByTestId('avatar')
56+
57+
// Test that both the custom CSS property and the style prop are applied
58+
expect(avatar).toHaveStyle('--avatarSize-regular: 20px')
59+
60+
// Check that style attribute contains both the custom property and the background
61+
const styleAttr = avatar.getAttribute('style') || ''
62+
expect(styleAttr).toContain('--avatarSize-regular: 20px')
63+
expect(styleAttr).toContain('background: black')
6664
})
6765
})
Lines changed: 11 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1+
import {describe, expect, it} from 'vitest'
2+
import {render} from '@testing-library/react'
13
import {AvatarStack} from '..'
2-
import {render, behavesAsComponent, checkExports} from '../utils/testing'
3-
import {render as HTMLRender} from '@testing-library/react'
4-
import axe from 'axe-core'
54

65
const avatarComp = (
76
<AvatarStack>
@@ -21,17 +20,7 @@ const rightAvatarComp = (
2120
</AvatarStack>
2221
)
2322

24-
describe('Avatar', () => {
25-
behavesAsComponent({
26-
Component: AvatarStack,
27-
toRender: () => avatarComp,
28-
options: {skipAs: true},
29-
})
30-
31-
checkExports('AvatarStack', {
32-
default: AvatarStack,
33-
})
34-
23+
describe('AvatarStack', () => {
3524
it('should support `className` on the outermost element', () => {
3625
const Element = () => (
3726
<AvatarStack className={'test-class-name'}>
@@ -41,26 +30,21 @@ describe('Avatar', () => {
4130
<img src="https://avatars.githubusercontent.com/github" alt="" />
4231
</AvatarStack>
4332
)
44-
expect(HTMLRender(<Element />).container.firstChild).toHaveClass('test-class-name')
45-
})
46-
47-
it('should have no axe violations', async () => {
48-
const {container} = HTMLRender(avatarComp)
49-
const results = await axe.run(container)
50-
expect(results).toHaveNoViolations()
33+
expect(render(<Element />).container.firstChild).toHaveClass('test-class-name')
5134
})
5235

5336
it('respects alignRight props', () => {
54-
expect(render(rightAvatarComp)).toMatchSnapshot()
37+
const {container} = render(rightAvatarComp)
38+
expect(container.firstChild).toMatchSnapshot()
5539
})
5640

5741
it('should have a tabindex of 0 if there are no interactive children', () => {
58-
const {container} = HTMLRender(avatarComp)
42+
const {container} = render(avatarComp)
5943
expect(container.querySelector('[tabindex="0"]')).toBeInTheDocument()
6044
})
6145

6246
it('should not have a tabindex if there are interactive children', () => {
63-
const {container} = HTMLRender(
47+
const {container} = render(
6448
<AvatarStack>
6549
<button type="button">Click me</button>
6650
</AvatarStack>,
@@ -69,7 +53,7 @@ describe('Avatar', () => {
6953
})
7054

7155
it('should not have a tabindex if disableExpand is true', () => {
72-
const {container} = HTMLRender(
56+
const {container} = render(
7357
<AvatarStack disableExpand>
7458
<img src="https://avatars.githubusercontent.com/primer" alt="" />
7559
<img src="https://avatars.githubusercontent.com/github" alt="" />
@@ -80,12 +64,12 @@ describe('Avatar', () => {
8064

8165
it('should support `style` prop on the outermost element', () => {
8266
const style = {backgroundColor: 'red'}
83-
const {container} = HTMLRender(
67+
const {container} = render(
8468
<AvatarStack style={style}>
8569
<img src="https://avatars.githubusercontent.com/primer" alt="" />
8670
<img src="https://avatars.githubusercontent.com/github" alt="" />
8771
</AvatarStack>,
8872
)
89-
expect(container.firstChild).toHaveStyle('background-color: red')
73+
expect(container.firstChild).toHaveStyle('background-color: rgb(255, 0, 0)')
9074
})
9175
})

packages/react/src/AvatarStack/__snapshots__/AvatarStack.test.tsx.snap

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,36 @@
1-
// Jest Snapshot v1, https://goo.gl/fbAQLP
1+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
22

3-
exports[`Avatar respects alignRight props 1`] = `
3+
exports[`AvatarStack > respects alignRight props 1`] = `
44
<span
5-
className="pc-AvatarStack--three-plus pc-AvatarStack--right AvatarStack"
5+
class="pc-AvatarStack--three-plus pc-AvatarStack--right prc-AvatarStack-AvatarStack-LcJ4R"
66
data-align-right=""
77
data-avatar-count="3+"
88
data-responsive=""
9-
style={
10-
{
11-
"--stackSize-narrow": "20px",
12-
"--stackSize-regular": "20px",
13-
"--stackSize-wide": "20px",
14-
}
15-
}
9+
style="--stackSize-narrow: 20px; --stackSize-regular: 20px; --stackSize-wide: 20px;"
1610
>
1711
<div
18-
className="pc-AvatarStackBody AvatarStackBody"
19-
tabIndex={0}
12+
class="pc-AvatarStackBody prc-AvatarStack-AvatarStackBody-LVwsN"
13+
tabindex="0"
2014
>
2115
2216
<img
2317
alt=""
24-
className="pc-AvatarItem AvatarItem"
18+
class="pc-AvatarItem prc-AvatarStack-AvatarItem-ZlFbL"
2519
src="https://avatars.githubusercontent.com/primer"
2620
/>
2721
<img
2822
alt=""
29-
className="pc-AvatarItem AvatarItem"
23+
class="pc-AvatarItem prc-AvatarStack-AvatarItem-ZlFbL"
3024
src="https://avatars.githubusercontent.com/github"
3125
/>
3226
<img
3327
alt=""
34-
className="pc-AvatarItem AvatarItem"
28+
class="pc-AvatarItem prc-AvatarStack-AvatarItem-ZlFbL"
3529
src="https://avatars.githubusercontent.com/primer"
3630
/>
3731
<img
3832
alt=""
39-
className="pc-AvatarItem AvatarItem"
33+
class="pc-AvatarItem prc-AvatarStack-AvatarItem-ZlFbL"
4034
src="https://avatars.githubusercontent.com/github"
4135
/>
4236
</div>

packages/react/vitest.config.browser.mts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ export default defineConfig({
3232
'src/ActionList/**/*.test.?(c|m)[jt]s?(x)',
3333
'src/AnchoredOverlay/**/*.test.?(c|m)[jt]s?(x)',
3434
'src/Autocomplete/**/*.test.?(c|m)[jt]s?(x)',
35+
'src/Avatar/**/*.test.?(c|m)[jt]s?(x)',
36+
'src/AvatarStack/**/*.test.?(c|m)[jt]s?(x)',
3537
'src/Banner/**/*.test.?(c|m)[jt]s?(x)',
3638
'src/Blankslate/**/*.test.?(c|m)[jt]s?(x)',
3739
'src/Box/**/*.test.?(c|m)[jt]s?(x)',

0 commit comments

Comments
 (0)