03/2022 / Milan Herda / perunhq.org
* zjednodušene
Druhy testov
Druhy testov
Druhy testov
Stiahnite si zdrojáky pre príklad:
Najrozšírenejší testovací framework pre JavaScript.
Pre základné fungovanie nepotrebuje konfiguráciu.
yarn add -D jest
yarn jest
Jest po spustení skenuje aktuálny adresár a jeho podadresáre a hľadá súbory s príponou .test.js alebo .test.ts
Jest bez dodatočnej konfigurácie vie pracovať iba s CommonJS modulmi, podporu pre ES6 treba doplniť.
yarn add -D @babel/core \
@babel/preset-env \
babel-jest
module.exports = {
presets: ['@babel/preset-env'],
};
Súbor babel.config.js:
import sum from '@local/es6-alias/sum';
module.exports = {
moduleNameMapper: {
'^@local/(.*)$': '<rootDir>/src/$1',
},
};
Súbor jest.config.js:
yarn add -D ts-jest ts-node @types/jest
module.exports = {
moduleNameMapper: {
'^@local/(.*)$': '<rootDir>/src/$1',
},
transform: {
'^.+\\.(js|jsx|mjs|cjs)$': 'babel-jest',
'^.+\\.(ts|tsx)$': 'ts-jest',
},
};
Súbor jest.config.js:
{
"compilerOptions": {
"target": "ESNext",
"strict": true,
"esModuleInterop": true,
"jsx": "react-jsx",
"moduleResolution": "node",
"resolveJsonModule": true,
"module": "ESNext"
}
}
Súbor tsconfig.json:
{
"compilerOptions": {
"target": "ESNext",
"strict": true,
"esModuleInterop": true,
"jsx": "react-jsx",
"paths": {
"@local/*": ["./src/*"]
},
"moduleResolution": "node",
"resolveJsonModule": true,
"module": "ESNext"
}
}
Súbor tsconfig.json:
Keď uz máme TypeScript, nemohli by sme jest.config mať napísaný v TypeScripte?
Mohli, lebo sme nainštalovali ts-node
Premenujeme jest.config.js na jest.config.ts
import { Config } from '@jest/types';
const config: Config.InitialOptions = {
moduleNameMapper: {
'^@local/(.*)$': '<rootDir>/src/$1',
},
transform: {
'^.+\\.(js|jsx|mjs|cjs)$': 'babel-jest',
'^.+\\.(ts|tsx)$': 'ts-jest',
},
};
export default config;
Rovnaké aliasy máme definované na dvoch miestach, nevieme to nejako zjednotiť?
import { Config } from '@jest/types';
import { pathsToModuleNameMapper } from 'ts-jest';
import tsconfig from './tsconfig.json';
const config: Config.InitialOptions = {
moduleNameMapper: pathsToModuleNameMapper(
tsconfig.compilerOptions.paths,
{
prefix: '<rootDir>',
}
),
transform: {
'^.+\\.(js|jsx|mjs|cjs)$': 'babel-jest',
'^.+\\.(ts|tsx)$': 'ts-jest',
},
};
export default config;
Nový testovací framework pre JavaScript, ktorý rýchlo naberá na popularite a vytláča Jest
yarn add -D vitest
yarn vitest
Jest po spustení skenuje aktuálny adresár a jeho podadresáre a hľadá súbory s príponou .test.js alebo .test.ts
Automaticky sa spúšťa vo watch móde
import { defineConfig } from 'vitest/config';
import path from 'path';
export default defineConfig({
test: {
globals: true,
},
resolve: {
alias: {
'@local': path.resolve(__dirname, 'src'),
},
},
});
Ak existuje súbor vite.config.js (ts), tak ho použije.
Ak nemáte vite projekt, môžete vytvoriť súbor vitest.config.js (ts).
Pri vývoji spúšťame priebežne testy aspoň pre nový kód.
Po dokončení tasku spustíme všetky testy.
Najlepšie je mať testy spúšťané aj v CI pre každý Pull Request a po každom merge-i.
Všetky!
Keď sa s testami začína a všetci sa ich učia, tak áno