Skip to content

Commit

Permalink
test: refactor type tests into a separate fixture (#21007)
Browse files Browse the repository at this point in the history
  • Loading branch information
danielroe committed May 22, 2023
1 parent 397c54c commit fd30cc1
Show file tree
Hide file tree
Showing 52 changed files with 483 additions and 63 deletions.
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@
"test:fixtures:payload": "TEST_PAYLOAD=js pnpm test:fixtures",
"test:fixtures:dev": "TEST_ENV=dev pnpm test:fixtures",
"test:fixtures:webpack": "TEST_BUILDER=webpack pnpm test:fixtures",
"test:types": "nuxi prepare test/fixtures/basic && cd test/fixtures/basic && npx vue-tsc --noEmit",
"test:types": "pnpm test:types:basic && pnpm test:types:minimal",
"test:types:basic": "nuxi prepare test/fixtures/basic-types && cd test/fixtures/basic-types && npx vue-tsc --noEmit",
"test:types:minimal": "nuxi prepare test/fixtures/minimal-types && cd test/fixtures/minimal-types && npx vue-tsc --noEmit",
"test:unit": "vitest run --dir packages",
"typecheck": "tsc --noEmit"
},
Expand Down
25 changes: 25 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions test/fixtures/basic-types/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
!extends/node_modules
6 changes: 6 additions & 0 deletions test/fixtures/basic-types/app.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export default defineAppConfig({
userConfig: 123,
nested: {
val: 2
}
})
28 changes: 28 additions & 0 deletions test/fixtures/basic-types/components/WithTypes.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<script setup lang="ts">
defineProps({
aProp: Number
})
defineSlots<{
fallback: { id: string }
}>()
defineExpose<{
_exposedValue: boolean
}>()
const _exposedValue = 42
const emit = defineEmits<{
'some-event': [id: string]
}>()
emit('some-event', '42')

Check warning on line 17 in test/fixtures/basic-types/components/WithTypes.vue

View workflow job for this annotation

GitHub Actions / lint

The "some-event" event has been triggered but not declared on `defineEmits`
// @ts-expect-error an invalid argument
emit('some-event', 42)

Check warning on line 19 in test/fixtures/basic-types/components/WithTypes.vue

View workflow job for this annotation

GitHub Actions / lint

The "some-event" event has been triggered but not declared on `defineEmits`
// @ts-expect-error an unknown event
emit('unknown-event', 42)

Check warning on line 21 in test/fixtures/basic-types/components/WithTypes.vue

View workflow job for this annotation

GitHub Actions / lint

The "unknown-event" event has been triggered but not declared on `defineEmits`
</script>

<template>
<div>
<!-- -->
</div>
</template>
3 changes: 3 additions & 0 deletions test/fixtures/basic-types/extends/bar/app.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export default {
fromLayer: true
}
5 changes: 5 additions & 0 deletions test/fixtures/basic-types/extends/bar/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
declare module 'bing' {
interface BingInterface {
foo: 'bar'
}
}
6 changes: 6 additions & 0 deletions test/fixtures/basic-types/extends/bar/layouts/override.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<template>
<div>
<div>Extended layout from bar</div>
<NuxtPage />
</div>
</template>
3 changes: 3 additions & 0 deletions test/fixtures/basic-types/extends/bar/middleware/override.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export default defineNuxtRouteMiddleware((to) => {
to.meta.override = 'Injected by extended middleware from bar'
})
1 change: 1 addition & 0 deletions test/fixtures/basic-types/extends/bar/nuxt.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export default defineNuxtConfig({})
14 changes: 14 additions & 0 deletions test/fixtures/basic-types/extends/bar/pages/override.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<script setup>
definePageMeta({
layout: 'override',
middleware: 'override'
})
</script>

<template>
<div>
<div>Extended page from bar</div>
<div>Middleware | override: {{ $route.meta.override }}</div>
<ExtendsOverride />
</div>
</template>

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 19 additions & 0 deletions test/fixtures/basic-types/extends/node_modules/foo/pages/foo.vue

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Empty file.
6 changes: 6 additions & 0 deletions test/fixtures/basic-types/layouts/custom.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<template>
<div>
Custom Layout:
<slot />
</div>
</template>
7 changes: 7 additions & 0 deletions test/fixtures/basic-types/middleware/global.global.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export default defineNuxtRouteMiddleware((to) => {
if ('abort' in to.query) {
return abortNavigation({
statusCode: 401
})
}
})
3 changes: 3 additions & 0 deletions test/fixtures/basic-types/middleware/named.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export default defineNuxtRouteMiddleware((to) => {
to.meta.auth = 'Injected by injectAuth middleware'
})
15 changes: 15 additions & 0 deletions test/fixtures/basic-types/modules/auto-registered/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { addServerHandler, createResolver, defineNuxtModule } from 'nuxt/kit'

export default defineNuxtModule({
meta: {
name: 'auto-registered-module'
},
setup () {
const resolver = createResolver(import.meta.url)

addServerHandler({
handler: resolver.resolve('./runtime/handler'),
route: '/auto-registered-module'
})
}
})
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export default defineEventHandler(() => 'handler added by auto-registered module')
23 changes: 23 additions & 0 deletions test/fixtures/basic-types/modules/example.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { addPlugin, createResolver, defineNuxtModule, useNuxt } from 'nuxt/kit'

export default defineNuxtModule({
defaults: {
enabled: true,
typeTest: (value: boolean) => typeof value === 'boolean'
},
meta: {
name: 'my-module',
configKey: 'sampleModule'
},
setup () {
const resolver = createResolver(import.meta.url)

addPlugin(resolver.resolve('./runtime/plugin'))
useNuxt().hook('app:resolve', (app) => {
app.middleware.push({
name: 'unctx-test',
path: resolver.resolve('./runtime/middleware')
})
})
}
})
19 changes: 19 additions & 0 deletions test/fixtures/basic-types/modules/page-extend.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { createResolver, defineNuxtModule, useNuxt } from 'nuxt/kit'

export default defineNuxtModule({
meta: {
name: 'page-extend'
},
setup () {
const nuxt = useNuxt()
const resolver = createResolver(import.meta.url)

nuxt.hook('pages:extend', (pages) => {
pages.push({
name: 'page-extend',
path: '/page-extend',
file: resolver.resolve('./runtime/page.vue')
})
})
}
})
4 changes: 4 additions & 0 deletions test/fixtures/basic-types/modules/runtime/middleware.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export default defineNuxtRouteMiddleware(async () => {
await new Promise(resolve => setTimeout(resolve, 1))
useNuxtApp()
})
17 changes: 17 additions & 0 deletions test/fixtures/basic-types/modules/runtime/page.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<script setup lang="ts">
import { setResponseHeader } from 'h3'
definePageMeta({
value: 'added in pages:extend'
})
if (process.server) {
setResponseHeader(useRequestEvent(), 'x-extend', useRoute().meta.value as string)
}
</script>

<template>
<div>
added in pages:extend
</div>
</template>
4 changes: 4 additions & 0 deletions test/fixtures/basic-types/modules/runtime/plugin.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export default defineNuxtPlugin(async () => {
await new Promise(resolve => setTimeout(resolve, 1))
useNuxtApp()
})
7 changes: 7 additions & 0 deletions test/fixtures/basic-types/modules/test/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { defineNuxtModule } from 'nuxt/kit'

export default defineNuxtModule({
meta: {
name: 'test'
}
})
76 changes: 76 additions & 0 deletions test/fixtures/basic-types/nuxt.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
export default defineNuxtConfig({
experimental: {
typedPages: true
},
typescript: {
strict: true,
tsConfig: {
compilerOptions: {
moduleResolution: process.env.MODULE_RESOLUTION
}
}
},
buildDir: process.env.NITRO_BUILD_DIR,
builder: process.env.TEST_BUILDER as 'webpack' | 'vite' ?? 'vite',
theme: './extends/bar',
extends: [
'./extends/node_modules/foo'
],
runtimeConfig: {
baseURL: '',
baseAPIToken: '',
privateConfig: 'secret_key',
public: {
ids: [1, 2, 3],
needsFallback: undefined,
testConfig: 123
}
},
appConfig: {
fromNuxtConfig: true,
nested: {
val: 1
}
},
modules: [
'./modules/test',
[
'~/modules/example',
{
typeTest (val) {
// @ts-expect-error module type defines val as boolean
const b: string = val
return !!b
}
}
],
function (_options, nuxt) {
nuxt.hook('pages:extend', (pages) => {
pages.push({
name: 'internal-async-parent',
path: '/internal-async-parent'
})
})
}
],
telemetry: false, // for testing telemetry types - it is auto-disabled in tests
hooks: {
'schema:extend' (schemas) {
schemas.push({
appConfig: {
someThing: {
value: {
$default: 'default',
$schema: {
tsType: 'string | false'
}
}
}
}
})
},
'prepare:types' ({ tsConfig }) {
tsConfig.include = tsConfig.include!.filter(i => i !== '../../../../**/*')
}
}
})
File renamed without changes.
16 changes: 16 additions & 0 deletions test/fixtures/basic-types/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"private": true,
"name": "fixture-basic-types",
"scripts": {
"build": "nuxi build"
},
"dependencies": {
"nuxt": "workspace:*"
},
"devDependencies": {
"ofetch": "latest",
"unplugin": "latest",
"vitest": "latest",
"vue-router": "latest"
}
}

0 comments on commit fd30cc1

Please sign in to comment.