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';