NodeJS: Co zrobić, aby działały ścieżki absolutne w Vitest?
Opublikowano: 24.12.2024 - tagi: Vitest JavaScript TypeScript Ścieżka Testowanie NodeJS Konfiguracja
Konfiguracja
Załóżmy, że mamy taką strukturę katalogów:
tsconfig.json
vitest.config.js
src
index.ts
calculator
add.ts
sub.ts
index.ts
Tak wygląda konfiguracja pliku tsconfig.json:
{
"compilerOptions": {
...
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
},
"include": ["src"]
}
}
Skupiłem się głównie na konfiguracji ścieżek absolutnych, resztę pominąłem.
Teraz pliki z kodem:
calculator/add.ts:
export function add(a, b): number {
return a + b;
}
calculator/sub.ts:
export function sub(a, b): number {
return a - b;
}
calculator/index.ts:
export * from './add'
export * from './sub'
index.ts:
import { add, sub } from '@/calculator'
const resultAdd = add(2, 2);
const resultSub = sub(2, 2);
console.log('resultAdd: ', resultAdd); // 4
console.log('resultSub: ', resultSub); // 0
Po uruchomieniu kodu wszystko działa prawidłowo. Napiszmy teraz test przy użyciu Vitest.
add.test.ts:
import { expect, test } from 'vitest'
import { add } from '@/calculator'
test('should add two numbers', () => {
// given
const a = 2;
const b = 2;
const expected = 4;
// when
const result = add(a, b);
// then
expect(result).toEqual(expected)
})
Po uruchomieniu testu okazuje się, że mamy problem!
Error: Failed to load url @/calculator (resolved id: @/calculator)
Jak sobie z tym poradzić?
Ścieżki absolutne w Vitest
Można to naprawić w łatwy sposób. Otwórz plik vitest.config.js i dodaj taki kod:
import { defineConfig } from 'vite'
import path from 'path'
export default defineConfig({
resolve: {
alias: {
'@': path.resolve(__dirname, './src')
},
},
})
Linijka:
'@': path.resolve(__dirname, './src')
Poinformuje Vitest, jak ma "czytać" ścieżki zaczynające się od @.
Po dodaniu konfiguracji test zostanie poprawnie uruchomiony.