Skip to content

Commit ca69146

Browse files
committed
test: setup vitest
1 parent 099fa28 commit ca69146

11 files changed

Lines changed: 1254 additions & 4 deletions

File tree

.github/workflows/manual-release.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ jobs:
4545
- name: Install Dependencies
4646
run: pnpm install
4747

48+
- name: Run tests
49+
run: pnpm test
50+
4851
- name: Setup Git
4952
run: |
5053
git config user.name 'github-actions[bot]'

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ yarn-debug.log*
66
yarn-error.log*
77
pnpm-debug.log*
88
lerna-debug.log*
9+
coverage
910

1011
node_modules
1112
dist

.husky/pre-commit

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
npx --no-install lint-staged
2+
pnpm test

package.json

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
"build:lib": "pnpm --filter \"./packages/**\" run build",
1515
"build:app": "pnpm --filter \"./apps/**\" run build",
1616
"ci:publish": "pnpm publish -r",
17+
"test": "vitest run",
18+
"test:watch": "vitest",
19+
"test:coverage": "vitest run --coverage",
1720
"lint": "eslint .",
1821
"prepare": "husky"
1922
},
@@ -26,19 +29,27 @@
2629
"devDependencies": {
2730
"@changesets/cli": "^2.27.12",
2831
"@eslint/js": "^9.19.0",
32+
"@testing-library/jest-dom": "^6.6.3",
33+
"@testing-library/react": "^16.2.0",
2934
"@trivago/prettier-plugin-sort-imports": "^5.2.2",
35+
"@types/jsdom": "^21.1.7",
36+
"@types/node": "^22.12.0",
37+
"@vitejs/plugin-react": "^4.3.4",
38+
"@vitest/coverage-v8": "3.0.5",
3039
"concurrently": "^9.1.2",
3140
"eslint": "^9.19.0",
3241
"eslint-plugin-react": "^7.37.4",
3342
"eslint-plugin-react-hooks": "^5.1.0",
3443
"eslint-plugin-react-refresh": "^0.4.18",
3544
"globals": "^15.14.0",
3645
"husky": "^9.1.7",
46+
"jsdom": "^26.0.0",
3747
"lint-staged": "^15.4.3",
3848
"react": "^19.0.0",
3949
"react-dom": "^19.0.0",
4050
"typescript": "~5.7.3",
4151
"typescript-eslint": "^8.23.0",
42-
"vite": "^6.0.5"
52+
"vite": "^6.0.5",
53+
"vitest": "^3.0.5"
4354
}
4455
}
Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2+
3+
exports[`renders QR code component 1`] = `
4+
{
5+
"asFragment": [Function],
6+
"baseElement": <body>
7+
<div>
8+
<svg
9+
aria-label="QR Code"
10+
height="128"
11+
role="img"
12+
viewBox="0 0 29 29"
13+
width="128"
14+
>
15+
<path
16+
d="M0,0 h29v29H0z"
17+
fill="#FFFFFF"
18+
/>
19+
<path
20+
d="M 4 4v 7h 7v -7zM 5 5h 5v 5h -5zM 18 4v 7h 7v -7zM 19 5h 5v 5h -5zM 4 18v 7h 7v -7zM 5 19h 5v 5h -5z"
21+
fill="#000000"
22+
/>
23+
<rect
24+
fill="#000000"
25+
height="3"
26+
rx="0"
27+
width="3"
28+
x="6"
29+
y="6"
30+
/>
31+
<rect
32+
fill="#000000"
33+
height="3"
34+
rx="0"
35+
width="3"
36+
x="20"
37+
y="6"
38+
/>
39+
<rect
40+
fill="#000000"
41+
height="3"
42+
rx="0"
43+
width="3"
44+
x="6"
45+
y="20"
46+
/>
47+
<path
48+
d="M12,4h1v1h-1ZM13,4h1v1h-1ZM14,4h1v1h-1ZM16,4h1v1h-1ZM13,5h1v1h-1ZM14,5h1v1h-1ZM14,6h1v1h-1ZM12,7h1v1h-1ZM15,7h1v1h-1ZM16,7h1v1h-1ZM14,8h1v1h-1ZM15,8h1v1h-1ZM13,9h1v1h-1ZM15,9h1v1h-1ZM12,10h1v1h-1ZM14,10h1v1h-1ZM16,10h1v1h-1ZM13,11h1v1h-1ZM16,11h1v1h-1ZM6,12h1v1h-1ZM8,12h1v1h-1ZM9,12h1v1h-1ZM10,12h1v1h-1ZM12,12h1v1h-1ZM13,12h1v1h-1ZM17,12h1v1h-1ZM21,12h1v1h-1ZM24,12h1v1h-1ZM7,13h1v1h-1ZM8,13h1v1h-1ZM11,13h1v1h-1ZM12,13h1v1h-1ZM16,13h1v1h-1ZM18,13h1v1h-1ZM19,13h1v1h-1ZM23,13h1v1h-1ZM24,13h1v1h-1ZM4,14h1v1h-1ZM5,14h1v1h-1ZM6,14h1v1h-1ZM7,14h1v1h-1ZM8,14h1v1h-1ZM10,14h1v1h-1ZM12,14h1v1h-1ZM16,14h1v1h-1ZM17,14h1v1h-1ZM18,14h1v1h-1ZM19,14h1v1h-1ZM21,14h1v1h-1ZM22,14h1v1h-1ZM23,14h1v1h-1ZM24,14h1v1h-1ZM4,15h1v1h-1ZM5,15h1v1h-1ZM6,15h1v1h-1ZM7,15h1v1h-1ZM9,15h1v1h-1ZM12,15h1v1h-1ZM13,15h1v1h-1ZM15,15h1v1h-1ZM16,15h1v1h-1ZM19,15h1v1h-1ZM20,15h1v1h-1ZM23,15h1v1h-1ZM4,16h1v1h-1ZM5,16h1v1h-1ZM9,16h1v1h-1ZM10,16h1v1h-1ZM12,16h1v1h-1ZM13,16h1v1h-1ZM14,16h1v1h-1ZM19,16h1v1h-1ZM21,16h1v1h-1ZM23,16h1v1h-1ZM24,16h1v1h-1ZM12,17h1v1h-1ZM14,17h1v1h-1ZM15,17h1v1h-1ZM16,17h1v1h-1ZM21,17h1v1h-1ZM24,17h1v1h-1ZM13,18h1v1h-1ZM14,18h1v1h-1ZM20,18h1v1h-1ZM21,18h1v1h-1ZM23,18h1v1h-1ZM24,18h1v1h-1ZM12,19h1v1h-1ZM13,19h1v1h-1ZM14,19h1v1h-1ZM16,19h1v1h-1ZM18,19h1v1h-1ZM23,19h1v1h-1ZM12,20h1v1h-1ZM14,20h1v1h-1ZM15,20h1v1h-1ZM18,20h1v1h-1ZM20,20h1v1h-1ZM21,20h1v1h-1ZM23,20h1v1h-1ZM24,20h1v1h-1ZM13,21h1v1h-1ZM18,21h1v1h-1ZM19,21h1v1h-1ZM23,21h1v1h-1ZM12,22h1v1h-1ZM16,22h1v1h-1ZM17,22h1v1h-1ZM19,22h1v1h-1ZM22,22h1v1h-1ZM24,22h1v1h-1ZM13,23h1v1h-1ZM14,23h1v1h-1ZM15,23h1v1h-1ZM17,23h1v1h-1ZM18,23h1v1h-1ZM19,23h1v1h-1ZM20,23h1v1h-1ZM21,23h1v1h-1ZM23,23h1v1h-1ZM14,24h1v1h-1ZM17,24h1v1h-1ZM18,24h1v1h-1ZM19,24h1v1h-1ZM22,24h1v1h-1ZM23,24h1v1h-1ZM24,24h1v1h-1Z"
49+
fill="#000000"
50+
shape-rendering="crispEdges"
51+
/>
52+
</svg>
53+
</div>
54+
</body>,
55+
"container": <div>
56+
<svg
57+
aria-label="QR Code"
58+
height="128"
59+
role="img"
60+
viewBox="0 0 29 29"
61+
width="128"
62+
>
63+
<path
64+
d="M0,0 h29v29H0z"
65+
fill="#FFFFFF"
66+
/>
67+
<path
68+
d="M 4 4v 7h 7v -7zM 5 5h 5v 5h -5zM 18 4v 7h 7v -7zM 19 5h 5v 5h -5zM 4 18v 7h 7v -7zM 5 19h 5v 5h -5z"
69+
fill="#000000"
70+
/>
71+
<rect
72+
fill="#000000"
73+
height="3"
74+
rx="0"
75+
width="3"
76+
x="6"
77+
y="6"
78+
/>
79+
<rect
80+
fill="#000000"
81+
height="3"
82+
rx="0"
83+
width="3"
84+
x="20"
85+
y="6"
86+
/>
87+
<rect
88+
fill="#000000"
89+
height="3"
90+
rx="0"
91+
width="3"
92+
x="6"
93+
y="20"
94+
/>
95+
<path
96+
d="M12,4h1v1h-1ZM13,4h1v1h-1ZM14,4h1v1h-1ZM16,4h1v1h-1ZM13,5h1v1h-1ZM14,5h1v1h-1ZM14,6h1v1h-1ZM12,7h1v1h-1ZM15,7h1v1h-1ZM16,7h1v1h-1ZM14,8h1v1h-1ZM15,8h1v1h-1ZM13,9h1v1h-1ZM15,9h1v1h-1ZM12,10h1v1h-1ZM14,10h1v1h-1ZM16,10h1v1h-1ZM13,11h1v1h-1ZM16,11h1v1h-1ZM6,12h1v1h-1ZM8,12h1v1h-1ZM9,12h1v1h-1ZM10,12h1v1h-1ZM12,12h1v1h-1ZM13,12h1v1h-1ZM17,12h1v1h-1ZM21,12h1v1h-1ZM24,12h1v1h-1ZM7,13h1v1h-1ZM8,13h1v1h-1ZM11,13h1v1h-1ZM12,13h1v1h-1ZM16,13h1v1h-1ZM18,13h1v1h-1ZM19,13h1v1h-1ZM23,13h1v1h-1ZM24,13h1v1h-1ZM4,14h1v1h-1ZM5,14h1v1h-1ZM6,14h1v1h-1ZM7,14h1v1h-1ZM8,14h1v1h-1ZM10,14h1v1h-1ZM12,14h1v1h-1ZM16,14h1v1h-1ZM17,14h1v1h-1ZM18,14h1v1h-1ZM19,14h1v1h-1ZM21,14h1v1h-1ZM22,14h1v1h-1ZM23,14h1v1h-1ZM24,14h1v1h-1ZM4,15h1v1h-1ZM5,15h1v1h-1ZM6,15h1v1h-1ZM7,15h1v1h-1ZM9,15h1v1h-1ZM12,15h1v1h-1ZM13,15h1v1h-1ZM15,15h1v1h-1ZM16,15h1v1h-1ZM19,15h1v1h-1ZM20,15h1v1h-1ZM23,15h1v1h-1ZM4,16h1v1h-1ZM5,16h1v1h-1ZM9,16h1v1h-1ZM10,16h1v1h-1ZM12,16h1v1h-1ZM13,16h1v1h-1ZM14,16h1v1h-1ZM19,16h1v1h-1ZM21,16h1v1h-1ZM23,16h1v1h-1ZM24,16h1v1h-1ZM12,17h1v1h-1ZM14,17h1v1h-1ZM15,17h1v1h-1ZM16,17h1v1h-1ZM21,17h1v1h-1ZM24,17h1v1h-1ZM13,18h1v1h-1ZM14,18h1v1h-1ZM20,18h1v1h-1ZM21,18h1v1h-1ZM23,18h1v1h-1ZM24,18h1v1h-1ZM12,19h1v1h-1ZM13,19h1v1h-1ZM14,19h1v1h-1ZM16,19h1v1h-1ZM18,19h1v1h-1ZM23,19h1v1h-1ZM12,20h1v1h-1ZM14,20h1v1h-1ZM15,20h1v1h-1ZM18,20h1v1h-1ZM20,20h1v1h-1ZM21,20h1v1h-1ZM23,20h1v1h-1ZM24,20h1v1h-1ZM13,21h1v1h-1ZM18,21h1v1h-1ZM19,21h1v1h-1ZM23,21h1v1h-1ZM12,22h1v1h-1ZM16,22h1v1h-1ZM17,22h1v1h-1ZM19,22h1v1h-1ZM22,22h1v1h-1ZM24,22h1v1h-1ZM13,23h1v1h-1ZM14,23h1v1h-1ZM15,23h1v1h-1ZM17,23h1v1h-1ZM18,23h1v1h-1ZM19,23h1v1h-1ZM20,23h1v1h-1ZM21,23h1v1h-1ZM23,23h1v1h-1ZM14,24h1v1h-1ZM17,24h1v1h-1ZM18,24h1v1h-1ZM19,24h1v1h-1ZM22,24h1v1h-1ZM23,24h1v1h-1ZM24,24h1v1h-1Z"
97+
fill="#000000"
98+
shape-rendering="crispEdges"
99+
/>
100+
</svg>
101+
</div>,
102+
"debug": [Function],
103+
"findAllByAltText": [Function],
104+
"findAllByDisplayValue": [Function],
105+
"findAllByLabelText": [Function],
106+
"findAllByPlaceholderText": [Function],
107+
"findAllByRole": [Function],
108+
"findAllByTestId": [Function],
109+
"findAllByText": [Function],
110+
"findAllByTitle": [Function],
111+
"findByAltText": [Function],
112+
"findByDisplayValue": [Function],
113+
"findByLabelText": [Function],
114+
"findByPlaceholderText": [Function],
115+
"findByRole": [Function],
116+
"findByTestId": [Function],
117+
"findByText": [Function],
118+
"findByTitle": [Function],
119+
"getAllByAltText": [Function],
120+
"getAllByDisplayValue": [Function],
121+
"getAllByLabelText": [Function],
122+
"getAllByPlaceholderText": [Function],
123+
"getAllByRole": [Function],
124+
"getAllByTestId": [Function],
125+
"getAllByText": [Function],
126+
"getAllByTitle": [Function],
127+
"getByAltText": [Function],
128+
"getByDisplayValue": [Function],
129+
"getByLabelText": [Function],
130+
"getByPlaceholderText": [Function],
131+
"getByRole": [Function],
132+
"getByTestId": [Function],
133+
"getByText": [Function],
134+
"getByTitle": [Function],
135+
"queryAllByAltText": [Function],
136+
"queryAllByDisplayValue": [Function],
137+
"queryAllByLabelText": [Function],
138+
"queryAllByPlaceholderText": [Function],
139+
"queryAllByRole": [Function],
140+
"queryAllByTestId": [Function],
141+
"queryAllByText": [Function],
142+
"queryAllByTitle": [Function],
143+
"queryByAltText": [Function],
144+
"queryByDisplayValue": [Function],
145+
"queryByLabelText": [Function],
146+
"queryByPlaceholderText": [Function],
147+
"queryByRole": [Function],
148+
"queryByTestId": [Function],
149+
"queryByText": [Function],
150+
"queryByTitle": [Function],
151+
"rerender": [Function],
152+
"unmount": [Function],
153+
}
154+
`;
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { render } from '@testing-library/react'
2+
import { expect, test } from 'vitest'
3+
4+
import { ReactQRCode } from './react-qr-code'
5+
6+
test('renders QR code component', () => {
7+
const result = render(<ReactQRCode value='test' />)
8+
expect(result.container).toBeInTheDocument()
9+
expect(result).toMatchSnapshot()
10+
})

packages/react-qr-code/tsconfig.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@
1515
"isolatedModules": true,
1616
"jsx": "react-jsx",
1717
"noEmit": true,
18-
"outDir": "./dist"
18+
"outDir": "./dist",
19+
"types": ["@testing-library/jest-dom"]
1920
},
20-
"include": ["src/**/*"],
21-
"exclude": ["**/*.spec.ts", "**/*.test.ts"]
21+
"include": ["src/**/*", "**/*.test.tsx"],
22+
"exclude": ["dist", "node_modules"]
2223
}

0 commit comments

Comments
 (0)