mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-22 05:35:13 +00:00
test: add basic benchmark tests (#24846)
This commit is contained in:
parent
2cab4cba12
commit
ba0d274b9d
31
.github/workflows/ci.yml
vendored
31
.github/workflows/ci.yml
vendored
@ -1,4 +1,4 @@
|
|||||||
name: CI
|
name: ci
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
@ -102,6 +102,35 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
category: "/language:javascript"
|
category: "/language:javascript"
|
||||||
|
|
||||||
|
benchmark:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions: {}
|
||||||
|
needs:
|
||||||
|
- build
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||||
|
- run: corepack enable
|
||||||
|
- uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1
|
||||||
|
with:
|
||||||
|
node-version: 20
|
||||||
|
cache: "pnpm"
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pnpm install
|
||||||
|
|
||||||
|
- name: Restore dist cache
|
||||||
|
uses: actions/download-artifact@f44cd7b40bfd40b6aa1cc1b9b5b7bf03d3c67110 # v4.1.0
|
||||||
|
with:
|
||||||
|
name: dist
|
||||||
|
path: packages
|
||||||
|
|
||||||
|
- name: Run benchmarks
|
||||||
|
uses: CodSpeedHQ/action@ad0378e48c3cb4c700f1cdc5e10943dbad3cc4ec # v2.0.2
|
||||||
|
with:
|
||||||
|
run: pnpm vitest bench
|
||||||
|
token: ${{ secrets.CODSPEED_TOKEN }}
|
||||||
|
|
||||||
typecheck:
|
typecheck:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
timeout-minutes: 10
|
timeout-minutes: 10
|
||||||
|
@ -42,6 +42,7 @@
|
|||||||
"magic-string": "^0.30.5"
|
"magic-string": "^0.30.5"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@codspeed/vitest-plugin": "^2.3.1",
|
||||||
"@nuxt/eslint-config": "0.2.0",
|
"@nuxt/eslint-config": "0.2.0",
|
||||||
"@nuxt/test-utils": "3.9.0",
|
"@nuxt/test-utils": "3.9.0",
|
||||||
"@nuxt/webpack-builder": "workspace:*",
|
"@nuxt/webpack-builder": "workspace:*",
|
||||||
|
23
packages/kit/test/load-nuxt-config.bench.ts
Normal file
23
packages/kit/test/load-nuxt-config.bench.ts
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import { fileURLToPath } from 'node:url'
|
||||||
|
import { bench, describe } from 'vitest'
|
||||||
|
import { join, normalize } from 'pathe'
|
||||||
|
import { withoutTrailingSlash } from 'ufo'
|
||||||
|
import { loadNuxtConfig } from '../src'
|
||||||
|
|
||||||
|
const fixtures = {
|
||||||
|
'empty directory': 'node_modules/fixture',
|
||||||
|
'basic test fixture': 'test/fixtures/basic',
|
||||||
|
'basic test fixture (types)': 'test/fixtures/basic-types',
|
||||||
|
'minimal test fixture': 'test/fixtures/minimal',
|
||||||
|
'minimal test fixture (types)': 'test/fixtures/minimal-types',
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('loadNuxtConfig', () => {
|
||||||
|
for (const fixture in fixtures) {
|
||||||
|
const relativeDir = join('../../..', fixtures[fixture as keyof typeof fixtures])
|
||||||
|
const path = withoutTrailingSlash(normalize(fileURLToPath(new URL(relativeDir, import.meta.url))))
|
||||||
|
bench(fixture, async () => {
|
||||||
|
await loadNuxtConfig({ cwd: path })
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
19
packages/kit/test/write-types.bench.ts
Normal file
19
packages/kit/test/write-types.bench.ts
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
import { fileURLToPath } from 'node:url'
|
||||||
|
import { afterAll, bench, describe } from 'vitest'
|
||||||
|
import { join, normalize } from 'pathe'
|
||||||
|
import { withoutTrailingSlash } from 'ufo'
|
||||||
|
import { loadNuxt, writeTypes } from '../src'
|
||||||
|
|
||||||
|
describe('writeTypes', async () => {
|
||||||
|
const relativeDir = join('../../..', 'test/fixtures/basic-types')
|
||||||
|
const path = withoutTrailingSlash(normalize(fileURLToPath(new URL(relativeDir, import.meta.url))))
|
||||||
|
|
||||||
|
const nuxt = await loadNuxt({ cwd: path })
|
||||||
|
afterAll(async () => {
|
||||||
|
await nuxt.close()
|
||||||
|
})
|
||||||
|
|
||||||
|
bench('write types', async () => {
|
||||||
|
await writeTypes(nuxt)
|
||||||
|
})
|
||||||
|
})
|
26
packages/nuxt/test/load-nuxt.bench.ts
Normal file
26
packages/nuxt/test/load-nuxt.bench.ts
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
import { fileURLToPath } from 'node:url'
|
||||||
|
import { bench, describe } from 'vitest'
|
||||||
|
import { normalize } from 'pathe'
|
||||||
|
import { withoutTrailingSlash } from 'ufo'
|
||||||
|
import { loadNuxt } from '../src'
|
||||||
|
|
||||||
|
const emptyDir = withoutTrailingSlash(normalize(fileURLToPath(new URL('../../../node_modules/fixture', import.meta.url))))
|
||||||
|
const basicTestFixtureDir = withoutTrailingSlash(normalize(fileURLToPath(new URL('../../../test/fixtures/basic', import.meta.url))))
|
||||||
|
|
||||||
|
describe('loadNuxt', () => {
|
||||||
|
bench('empty directory', async () => {
|
||||||
|
const nuxt = await loadNuxt({
|
||||||
|
cwd: emptyDir,
|
||||||
|
ready: true
|
||||||
|
})
|
||||||
|
await nuxt.close()
|
||||||
|
})
|
||||||
|
|
||||||
|
bench('basic test fixture', async () => {
|
||||||
|
const nuxt = await loadNuxt({
|
||||||
|
cwd: basicTestFixtureDir,
|
||||||
|
ready: true
|
||||||
|
})
|
||||||
|
await nuxt.close()
|
||||||
|
})
|
||||||
|
})
|
@ -19,6 +19,9 @@ importers:
|
|||||||
|
|
||||||
.:
|
.:
|
||||||
devDependencies:
|
devDependencies:
|
||||||
|
'@codspeed/vitest-plugin':
|
||||||
|
specifier: ^2.3.1
|
||||||
|
version: 2.3.1(vite@5.0.10)(vitest@1.1.0)
|
||||||
'@nuxt/eslint-config':
|
'@nuxt/eslint-config':
|
||||||
specifier: 0.2.0
|
specifier: 0.2.0
|
||||||
version: 0.2.0(eslint@8.56.0)
|
version: 0.2.0(eslint@8.56.0)
|
||||||
@ -1206,6 +1209,24 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
mime: 3.0.0
|
mime: 3.0.0
|
||||||
|
|
||||||
|
/@codspeed/core@2.3.1:
|
||||||
|
resolution: {integrity: sha512-7KRwBX4iXK33gEQwh8jPWBF9srGIjewm3oc+A/66caiG/aOyHmxJCapjAZxT2f2vIVYqR7CghzqlxY2ik0DNBg==}
|
||||||
|
dependencies:
|
||||||
|
find-up: 6.3.0
|
||||||
|
node-gyp-build: 4.6.1
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
/@codspeed/vitest-plugin@2.3.1(vite@5.0.10)(vitest@1.1.0):
|
||||||
|
resolution: {integrity: sha512-/e4G2B/onX/hG/EjUU/NpDxnIryeTDamVRTBeWfgQDoex3g7GDzTwoQktaU5l/Asw3ZjEErQg+oQVToQ6jYZlA==}
|
||||||
|
peerDependencies:
|
||||||
|
vite: 5.0.10
|
||||||
|
vitest: '>=1.0.0-beta.4 || >=1'
|
||||||
|
dependencies:
|
||||||
|
'@codspeed/core': 2.3.1
|
||||||
|
vite: 5.0.10(@types/node@20.10.5)
|
||||||
|
vitest: 1.1.0(@types/node@20.10.5)(happy-dom@12.10.3)
|
||||||
|
dev: true
|
||||||
|
|
||||||
/@discoveryjs/json-ext@0.5.7:
|
/@discoveryjs/json-ext@0.5.7:
|
||||||
resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==}
|
resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==}
|
||||||
engines: {node: '>=10.0.0'}
|
engines: {node: '>=10.0.0'}
|
||||||
@ -5138,6 +5159,14 @@ packages:
|
|||||||
locate-path: 6.0.0
|
locate-path: 6.0.0
|
||||||
path-exists: 4.0.0
|
path-exists: 4.0.0
|
||||||
|
|
||||||
|
/find-up@6.3.0:
|
||||||
|
resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==}
|
||||||
|
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||||
|
dependencies:
|
||||||
|
locate-path: 7.2.0
|
||||||
|
path-exists: 5.0.0
|
||||||
|
dev: true
|
||||||
|
|
||||||
/flat-cache@3.1.1:
|
/flat-cache@3.1.1:
|
||||||
resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==}
|
resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==}
|
||||||
engines: {node: '>=12.0.0'}
|
engines: {node: '>=12.0.0'}
|
||||||
@ -6312,6 +6341,13 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
p-locate: 5.0.0
|
p-locate: 5.0.0
|
||||||
|
|
||||||
|
/locate-path@7.2.0:
|
||||||
|
resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
|
||||||
|
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||||
|
dependencies:
|
||||||
|
p-locate: 6.0.0
|
||||||
|
dev: true
|
||||||
|
|
||||||
/lodash-es@4.17.21:
|
/lodash-es@4.17.21:
|
||||||
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
|
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
|
||||||
|
|
||||||
@ -7221,6 +7257,13 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
yocto-queue: 0.1.0
|
yocto-queue: 0.1.0
|
||||||
|
|
||||||
|
/p-limit@4.0.0:
|
||||||
|
resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
|
||||||
|
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||||
|
dependencies:
|
||||||
|
yocto-queue: 1.0.0
|
||||||
|
dev: true
|
||||||
|
|
||||||
/p-limit@5.0.0:
|
/p-limit@5.0.0:
|
||||||
resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==}
|
resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==}
|
||||||
engines: {node: '>=18'}
|
engines: {node: '>=18'}
|
||||||
@ -7241,6 +7284,13 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
p-limit: 3.1.0
|
p-limit: 3.1.0
|
||||||
|
|
||||||
|
/p-locate@6.0.0:
|
||||||
|
resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
|
||||||
|
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||||
|
dependencies:
|
||||||
|
p-limit: 4.0.0
|
||||||
|
dev: true
|
||||||
|
|
||||||
/p-map@4.0.0:
|
/p-map@4.0.0:
|
||||||
resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==}
|
resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
@ -7324,6 +7374,11 @@ packages:
|
|||||||
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
|
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
|
/path-exists@5.0.0:
|
||||||
|
resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
|
||||||
|
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/path-is-absolute@1.0.1:
|
/path-is-absolute@1.0.1:
|
||||||
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
|
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
import { resolve } from 'node:path'
|
import { resolve } from 'node:path'
|
||||||
import { configDefaults, defineConfig } from 'vitest/config'
|
import { configDefaults, defineConfig } from 'vitest/config'
|
||||||
import { isWindows } from 'std-env'
|
import { isWindows } from 'std-env'
|
||||||
|
import codspeedPlugin from '@codspeed/vitest-plugin'
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
|
plugins: [codspeedPlugin()],
|
||||||
resolve: {
|
resolve: {
|
||||||
alias: {
|
alias: {
|
||||||
'#build/nuxt.config.mjs': resolve('./test/mocks/nuxt-config'),
|
'#build/nuxt.config.mjs': resolve('./test/mocks/nuxt-config'),
|
||||||
|
Loading…
Reference in New Issue
Block a user