Skip to content

Commit d9e111d

Browse files
authored
chore: stabilize vitest setup and fix failing tests (CircuitVerse#871)
1 parent cdc355e commit d9e111d

File tree

6 files changed

+183
-11
lines changed

6 files changed

+183
-11
lines changed

.github/workflows/vitest.yml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
name: Tests
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
pull_request:
8+
9+
permissions: {}
10+
11+
concurrency:
12+
group: ci-${{ github.event.pull_request.number || github.ref }}
13+
cancel-in-progress: true
14+
15+
jobs:
16+
test:
17+
name: Run Tests
18+
runs-on: ubuntu-latest
19+
timeout-minutes: 10
20+
21+
steps:
22+
- name: Checkout repository
23+
uses: actions/checkout@v4
24+
25+
- name: Setup Node.js
26+
uses: actions/setup-node@v4
27+
with:
28+
node-version: '22'
29+
cache: 'npm'
30+
31+
- name: Install dependencies
32+
run: npm ci
33+
34+
- name: Run tests
35+
run: npm run test -- --reporter=github-actions

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"lint": "eslint --ext .js,.vue --ignore-path .gitignore --fix src",
1212
"format": "prettier . --write",
1313
"postinstall": "husky install",
14-
"test": "vitest"
14+
"test": "vitest --silent"
1515
},
1616
"dependencies": {
1717
"@fortawesome/fontawesome-free": "^6.5.1",

src/simulator/spec/vitestSetup.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { vi, afterEach } from 'vitest';
2+
13
global.window = window;
24
global.jQuery = require('jquery');
35
global.DPR = true;
@@ -9,3 +11,35 @@ window.$ = require('jquery');
911
window.restrictedElements = [];
1012
window.userSignedIn = true;
1113
window.embed = false;
14+
15+
vi.useFakeTimers()
16+
17+
afterEach(() => {
18+
vi.runOnlyPendingTimers()
19+
vi.clearAllTimers()
20+
})
21+
22+
vi.mock('@tauri-apps/api/event', () => ({
23+
listen: vi.fn(() => Promise.resolve(() => {})),
24+
}))
25+
26+
global.ResizeObserver = vi.fn().mockImplementation(() => ({
27+
observe: vi.fn(),
28+
unobserve: vi.fn(),
29+
disconnect: vi.fn(),
30+
}))
31+
32+
HTMLCanvasElement.prototype.getContext = vi.fn(() => ({
33+
clearRect: vi.fn(),
34+
fillRect: vi.fn(),
35+
fillText: vi.fn(),
36+
strokeRect: vi.fn(),
37+
beginPath: vi.fn(),
38+
moveTo: vi.fn(),
39+
lineTo: vi.fn(),
40+
stroke: vi.fn(),
41+
closePath: vi.fn(),
42+
arc: vi.fn(),
43+
fill: vi.fn(),
44+
rect: vi.fn(),
45+
}))

v1/src/simulator/spec/vitestSetup.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { vi, afterEach } from 'vitest';
2+
13
global.window = window;
24
global.jQuery = require('jquery');
35
global.DPR = true;
@@ -9,3 +11,35 @@ window.$ = require('jquery');
911
window.restrictedElements = [];
1012
window.userSignedIn = true;
1113
window.embed = false;
14+
15+
vi.useFakeTimers()
16+
17+
afterEach(() => {
18+
vi.runOnlyPendingTimers()
19+
vi.clearAllTimers()
20+
})
21+
22+
vi.mock('@tauri-apps/api/event', () => ({
23+
listen: vi.fn(() => Promise.resolve(() => {})),
24+
}))
25+
26+
global.ResizeObserver = vi.fn().mockImplementation(() => ({
27+
observe: vi.fn(),
28+
unobserve: vi.fn(),
29+
disconnect: vi.fn(),
30+
}))
31+
32+
HTMLCanvasElement.prototype.getContext = vi.fn(() => ({
33+
clearRect: vi.fn(),
34+
fillRect: vi.fn(),
35+
fillText: vi.fn(),
36+
strokeRect: vi.fn(),
37+
beginPath: vi.fn(),
38+
moveTo: vi.fn(),
39+
lineTo: vi.fn(),
40+
stroke: vi.fn(),
41+
closePath: vi.fn(),
42+
arc: vi.fn(),
43+
fill: vi.fn(),
44+
rect: vi.fn(),
45+
}))

vite.config.ts

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,6 @@ export default defineConfig(() => {
5656
},
5757
},
5858
},
59-
test: {
60-
globals: true,
61-
environment: 'jsdom',
62-
server: {
63-
deps: {
64-
inline: ['vuetify'],
65-
},
66-
},
67-
setupFiles: './src/simulator/spec/vitestSetup.ts',
68-
},
6959
server: {
7060
port: 4000,
7161
},

vitest.workspace.ts

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
import { defineWorkspace, defineConfig } from 'vitest/config'
2+
import { fileURLToPath, URL } from 'url'
3+
4+
import vue from '@vitejs/plugin-vue'
5+
import vuetify from 'vite-plugin-vuetify'
6+
import { vueI18n } from '@intlify/vite-plugin-vue-i18n'
7+
import cssInjectedByJsPlugin from 'vite-plugin-css-injected-by-js'
8+
9+
const createWorkspaceConfig = (version) =>
10+
defineConfig({
11+
plugins: [
12+
vue(),
13+
vuetify({ autoImport: true }),
14+
cssInjectedByJsPlugin(),
15+
vueI18n({
16+
include: fileURLToPath(
17+
new URL(
18+
version === 'src'
19+
? './src/locales/**'
20+
: `./${version}/src/locales/**`,
21+
import.meta.url
22+
)
23+
),
24+
}),
25+
],
26+
27+
resolve: {
28+
alias: {
29+
'#': fileURLToPath(
30+
new URL(
31+
version === 'src' ? './src' : `./${version}/src`,
32+
import.meta.url
33+
)
34+
),
35+
'@': fileURLToPath(
36+
new URL(
37+
version === 'src'
38+
? './src/components'
39+
: `./${version}/src/components`,
40+
import.meta.url
41+
)
42+
),
43+
},
44+
},
45+
46+
test: {
47+
name: version,
48+
globals: true,
49+
environment: 'jsdom',
50+
51+
include: [
52+
version === 'src'
53+
? 'src/**/*.{spec,test}.{js,ts}'
54+
: `${version}/src/**/*.{spec,test}.{js,ts}`,
55+
],
56+
57+
exclude:
58+
version === 'src'
59+
? ['v0/**/*', 'v1/**/*']
60+
: ['src/**/*', version === 'v0' ? 'v1/**/*' : 'v0/**/*'],
61+
62+
setupFiles: [
63+
version === 'src'
64+
? './src/simulator/spec/vitestSetup.ts'
65+
: `./${version}/src/simulator/spec/vitestSetup.ts`,
66+
],
67+
68+
server: {
69+
deps: {
70+
inline: ['vuetify'],
71+
},
72+
},
73+
},
74+
})
75+
76+
export default defineWorkspace([
77+
createWorkspaceConfig('src'),
78+
createWorkspaceConfig('v1'),
79+
])

0 commit comments

Comments
 (0)