npm install --save-dev jest @types/jest npx jest --init export default {
clearMocks: true,
testEnvironment: 'jsdom',
coveragePathIgnorePatterns: ['\\\\node_modules\\\\'],
moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx', 'json', 'node'],
moduleDirectories: ['node_modules'],
modulePaths: ['<rootDir>src'],
testMatch: [
'<rootDir>src/**/*(*.)@(spec|test).[tj]s?(x)',
],
rootDir: '../../',
transformIgnorePatterns: ['node_modules/(?!axios)'],
reporters: [
'default',
[
'jest-html-reporters',
{
publicPath: '<rootDir>/reports/unit',
filename: 'report.html',
inlineSource: true,
},
],
],
}
test:unit": "jest --config ./config/jest/jest.config.ts env: {
jest: true,
}, 'max-len': ['error', { ignoreComments: true, code: 125 }], describe('tests', () => {
test('successful test', () => {
expect(true).toBe(true);
});
});
npm install -D jest jest-environment-jsdom @testing-library/jest-dom ts-node import { Config } from 'jest';
import nextJest from 'next/jest';
const createJestConfig = nextJest({
dir: './',
});
const config: Config = {
clearMocks: true,
testEnvironment: 'jsdom',
coverageProvider: 'v8',
coveragePathIgnorePatterns: ['\\\\node_modules\\\\'],
moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx', 'json', 'node'],
moduleDirectories: ['node_modules'],
modulePaths: ['<rootDir>src'],
testMatch: ['<rootDir>src/**/*(*.)@(spec|test).[tj]s?(x)'],
rootDir: '../../',
transformIgnorePatterns: ['node_modules/(?!axios)'],
reporters: [
'default',
[
'jest-html-reporters',
{
publicPath: '<rootDir>/reports/unit',
filename: 'report.html',
inlineSource: true,
},
],
],
};
export default createJestConfig(config); export {};
npm run test:unit.
describe('testing', () => {
test('successful test', () => {
expect(true).toBe(true);
});
test('failed test', () => {
expect(false).toBe(true);
});
}); npm run test:unit
export const jestTest = (arg: string): string => {
return arg;
}
describe('tests', () => {
test('successful test', () => {
expect(true).toBe(true);
});
test('failed test', () => {
expect(false).toBe(true);
});
test('jestTest', () => {
expect(jestTest('jest')).toBe('jest');
});
}); npm i @babel/preset-typescript "presets": [
"@babel/preset-env",
"@babel/preset-typescript",
],
npm run test:unit npm install --save-dev @testing-library/react @testing-library/dom import '@testing-library/jest-dom'; setupFilesAfterEnv: ['<rootDir>config/jest/setupTests.ts'] "include": [
"./config/jest/setupTests.ts",
]
describe('Button', () => {
test('Проверка отрисовки', () => {
render(<Button>Test</Button>);
expect(screen.getByText('Test')).toBeInTheDocument();
});
}); npm i @babel/preset-react {
"presets": [
[
"@babel/preset-react",
{
"runtime": "automatic"
}
]
],
}
npm i identity-obj-proxy
moduleNameMapper: {
'\\.(s?css)$': 'identity-obj-proxy',
},
npm run test:unit Button.test.tsx moduleNameMapper: {
'\\.(s?css)$': 'identity-obj-proxy',
'\\.svg': path.resolve(__dirname, 'jestEmptyComponent.tsx'),
}, const jestEmptyComponent = function () {
return <div />;
};
export default jestEmptyComponent; jest.mock('../../assets/icons/arrowLeft.svg', () => () => <div data-testid="svg-mock" />); import nextJest from 'next/jest';
import path from 'path';
const customJestConfig = {
setupFilesAfterEnv: ['<rootDir>config/jest/setupTests.ts'],
clearMocks: true,
testEnvironment: 'jsdom',
coverageProvider: 'v8',
coveragePathIgnorePatterns: ['\\\\node_modules\\\\'],
moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx', 'json', 'node'],
moduleDirectories: ['node_modules'],
modulePaths: ['<rootDir>src'],
testMatch: ['<rootDir>src/**/*(*.)@(spec|test).[tj]s?(x)'],
rootDir: '../../',
transformIgnorePatterns: ['node_modules/(?!axios)'],
reporters: [
'default',
[
'jest-html-reporters',
{
publicPath: '<rootDir>/reports/unit',
filename: 'report.html',
inlineSource: true,
},
],
],
};
const createJestConfig = nextJest({
dir: './',
});
const jestConfig = async () => {
const nextJestConfig = await createJestConfig(customJestConfig)();
return {
...nextJestConfig,
moduleNameMapper: {
'\\.svg$': path.resolve(__dirname, 'jestEmptyComponent.tsx'),
...nextJestConfig.moduleNameMapper,
},
};
};
export default jestConfig;
describe('Button Component', () => {
it('Должен отображаться с левым значком', () => {
render(<Button addonLeft={<ArrowTestIcon />}>Click Me</Button>);
expect(screen.getByText('Click Me')).toBeInTheDocument();
});
}); npm i -D regenerator-runtime import 'regenerator-runtime/runtime';