test: add basic benchmark tests (#24846)

This commit is contained in:
Daniel Roe 2023-12-20 22:18:31 +00:00 committed by GitHub
parent 2cab4cba12
commit ba0d274b9d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 156 additions and 1 deletions

View File

@ -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

View File

@ -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:*",

View 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 })
})
}
})

View 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)
})
})

View 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()
})
})

View File

@ -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'}

View File

@ -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'),