ujian unit - vitest Apl Svelte dengan Typescript : ParseError ... Token tidak dijangka ` : `
Saya sedang mencuba untuk menyediakan beberapa ujian unit dengan vitest pada Aplikasi Svelte (dengan sokongan Typescript), dan saya mendapat ralat berikut:
ParseError: D:/(...)/src/Overlay.svelte:23:17 Unexpected token
Dalam fail ini, yang bersamaan dengan:
<!-- Overlay.svelte -->
<script lang="ts"> // line 1
// (...)
let startDate:string = tomorrows_date(); // line 23
// ^--23:17
Saya telah cuba untuk menghasilkan semula struktur dari contoh rasmi Vitest di GitHub.
Saya melihat sedikit di mana-mana dan cuba menggunakan vitest-svelte-kit atau menambah svelte.config.js (Yang tidak berfungsi kerana pernyataan import "di luar modul")
Lihat konfigurasi saya di bawah.
Dalam package.json saya, saya menambah semuanya ini:
// package.json
(...)
"scripts": {
"build": "rollup -c",
"dev": "rollup -c -w",
"start": "sirv public --no-clear -c",
"validate": "svelte-check",
"check": "svelte-check --tsconfig ./tsconfig.json",
"test": "vitest",
"test:ui": "vitest --ui",
"coverage": "vitest run --coverage"
},
"devDependencies": {
"@rollup/plugin-commonjs": "^21.0.1",
"@rollup/plugin-json": "^4.1.0",
"@rollup/plugin-node-resolve": "^13.1.3",
"@rollup/plugin-typescript": "^8.0.0",
(...)
"@sveltejs/vite-plugin-svelte": "^1.0.0-next.45",
"@testing-library/svelte": "^3.1.3",
"@tsconfig/svelte": "^2.0.0",
"@vitest/ui": "latest",
"jsdom": "latest",
"rollup": "^2.67.0",
"rollup-plugin-css-only": "^3.1.0",
"rollup-plugin-livereload": "^2.0.5",
"rollup-plugin-svelte": "^7.1.0",
"rollup-plugin-terser": "^7.0.2",
"svelte": "^3.49.0",
"svelte-check": "^2.0.0",
"svelte-preprocess": "^4.0.0",
"tslib": "^2.0.0",
"typescript": "^4.0.0",
"vitest": "^0.18.1",
"vitest-svelte-kit": "^0.0.6"
},
"dependencies": {
"sirv-cli": "^2.0.2",
"svelte-material-ui": "^6.0.0-beta.16"
},
"stackblitz": {
"startCommand": "npm run test:ui"
}
}
// tsconfig.json
{
"extends": "@tsconfig/svelte/tsconfig.json",
"include": ["src/**/*"],
"exclude": ["node_modules/*", "__sapper__/*", "public/*"]
}
// vitest.config.js
import { defineConfig } from 'vite'
import { svelte } from '@sveltejs/vite-plugin-svelte'
export default defineConfig({
plugins: [
svelte({ hot: !process.env.VITEST }),
],
test: {
globals: true,
environment: 'jsdom',
},
})
Saya tidak mempunyai svelte.config.js
Jawapan #1
TS memerlukan svelte-preprocess, konfigurasi ujian mungkin tidak memuatkannya secara implisit. Anda boleh menyampaikannya kepada plugin atau mengkonfigurasinya melalui svelte.config.js:
const sveltePreprocess = require('svelte-preprocess');
module.exports = {
preprocess: sveltePreprocess({ ... })
};
Jawapan #2
Gunakan konfigurasi berikut dalam fail konfigurasi vitest anda :
import { defineConfig } from 'vitest/config'
import { svelte } from '@sveltejs/vite-plugin-svelte'
import sveltePreprocess from 'svelte-preprocess'
export default defineConfig({
plugins: [
svelte({
hot: !process.env.VITEST,
preprocess: [sveltePreprocess({ typescript: true })] // <-- this line allow vitest to parse svelte component using typescript
})
],
test: {
include: ['imports/**/*.vitest.{js,ts}'],
globals: true,
environment: 'jsdom',
},
})
