Contents
Outline
In this blog post, I will introduce how to configure a test environment in a TypeScript-based React project created using Vite
. Let’s also see how to write test code using Jest
and React Testing Library
.
Blog series
This blog post is part of a series. Here is the list of Vite
series.
- [Vite] Getting started with TypeScript-based React project
- [Vite] Configure test environment in TypeScript-based React project
- [Vite] Configure Prettier in TypeScript-based React project
- [Vite] Configure Stylelint(CSS-in-JS) in TypeScript-based React project
Install Jest
Jest
is a test framework created by Facebook and is the most commonly used test framework in React
projects. With Jest
, you can write and run test code for JavaScript
.
To install Jest
in a TypeScript
-based React
project created using Vite
, run the following command.
npm i -D jest @types/jest ts-jest
# yarn add -D jest @types/jest ts-jest
jest
: InstallJest
.@types/jest
: Install the type definition file forJest
.ts-jest
: A package that supports runningJest
usingTypeScript
.
Install Testing Libarary
React Testing Library
is a library used to test React
components. With React Testing Library
, you can write tests to verify the rendering results of React
components or trigger events.
To install React Testing Library
in a TypeScript
-based React
project created using Vite
, run the following command.
npm i -D jest-environment-jsdom @testing-library/react @testing-library/jest-dom @testing-library/user-event jest-svg-transformer identity-obj-proxy
# yarn add -D jest-environment-jsdom @testing-library/react @testing-library/jest-dom @testing-library/user-event jest-svg-transformer identity-obj-proxy
jest-environment-jsdom
: A package that allowsJest
to use thejsdom
environment.@testing-library/react
: InstallReact Testing Library
.@testing-library/jest-dom
: A package that allowsJest
to useReact Testing Library
.@testing-library/user-event
: A package that triggers events used inReact Testing Library
.jest-svg-transformer
: A package that allowsJest
to useSVG
files.identity-obj-proxy
: A package that allowsJest
to useCSS Module
when usingCSS Module
.
Jest basic configuration
To test a TypeScript
-based React
project using Jest
, you need to configure Jest
. Run the following command to create a Jest
configuration file in the root directory.
npx ts-jest config:init
# yarn ts-jest config:init
Then, you can see the jest.config.js
file, which is the configuration file of Jest
, created in the root directory. When you open the file, you can see the following code.
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
};
Vite
-created projects use ES Modules
as the default module system, so you need to change module.export
(CommonJS module system) to export default
(ES Modules system) as follows.
/** @type {import('ts-jest').JestConfigWithTsJest} */
export default {
preset: 'ts-jest',
testEnvironment: 'node',
};
Also, React
projects use CommonJS
and ES modules
differently, so there may be warnings when running tests. To prevent this, open the tsconfig.json
file and set the esModuleInterop
option as follows.
{
...
"compilerOptions": {
"esModuleInterop": true,
...
},
...
}
Configure jest-environment-jsdom
Jest
’s default test environment is set to node
as follows.
/** @type {import('ts-jest').JestConfigWithTsJest} */
export default {
preset: 'ts-jest',
testEnvironment: 'node',
};
However, React
tests should be run in a DOM
environment, so you need to set it to use jest-environment-jsdom
as follows.
/** @type {import('ts-jest').JestConfigWithTsJest} */
export default {
preset: 'ts-jest',
testEnvironment: 'jest-environment-jsdom',
};
Configure React Testing Library
When testing React
components with React Testing Library
, you need to configure it to use Matchers
for React
components provided by React Testing Library
.
To configure Matchers
for Jest
provided by React Testing Library
, create a jest.setup.ts
file in the root directory and import @testing-library/jest-dom
as follows.
import '@testing-library/jest-dom';
And then open the jest.config.js
file and add the setupFilesAfterEnv
option as follows.
/** @type {import('ts-jest').JestConfigWithTsJest} */
export default {
preset: 'ts-jest',
testEnvironment: 'node',
setupFilesAfterEnv: ['./jest.setup.ts'],
};
To be able to use the Matchers
types of React Testing Library
in the test files of Jest
, open the tsconfig.json
file and add the types
option as follows.
{
...
"compilerOptions": {
"esModuleInterop": true,
"types": ["@testing-library/jest-dom"],
...
},
...
}
Configure CSS and SVG files
To use CSS
files and SVG
files in Jest
, you need to add the moduleNameMapper
option to the jest.config.js
file to make Jest
use CSS
files and SVG
files.
/** @type {import('ts-jest').JestConfigWithTsJest} */
export default {
preset: 'ts-jest',
testEnvironment: 'jest-environment-jsdom',
setupFilesAfterEnv: ['./jest.setup.ts'],
moduleNameMapper: {
'^.+\\.svg$': 'jest-svg-transformer',
'\\.(css|less|scss)$': 'identity-obj-proxy',
},
};
Execute Jest
Now you can test a TypeScript
-based React
project using Jest
and React Testing Library
. To run the test using Jest
, open the package.json
file and modify it as follows.
"scripts": {
...
"test": "jest --watchAll",
"test:ci": "jest --ci"
},
After modifying the package.json
file, run the following command to run Jest
.
npm run test
# yarn test
Then, you can see Jest
running well as follows.
No tests found, exiting with code 0
Watch Usage
› Press f to run only failed tests.
› Press o to only run tests related to changed files.
› Press p to filter by a filename regex pattern.
› Press t to filter by a test name regex pattern.
› Press q to quit watch mode.
› Press Enter to trigger a test run.
Currently, we don’t have any test code written, so you can see the message No tests found
being displayed.
Write test code
Now let’s see how to write test code using Jest
and React Testing Library
in a TypeScript
-based React
project. Create an App.test.tsx
file in the src
directory and modify it as follows.
import { render, screen } from '@testing-library/react';
import App from './App';
describe('<App />', () => {
it('Rendered well', async () => {
const { container } = render(<App />);
expect(screen.getByAltText('Vite logo')).toBeInTheDocument();
expect(screen.getByAltText('React logo')).toBeInTheDocument();
expect(screen.getByText('Vite + React')).toBeInTheDocument();
expect(container).toMatchSnapshot();
});
});
This test code uses Jest
and React Testing Library
to check if the Vite
logo, React
logo, and Vite + React
text are rendered well.
To run the test you created, run the following command in the terminal to run the test.
npm run test
# yarn test
Then, you can see that the test runs well as follows.
PASS src/App.test.tsx
<App />
✓ Rendered well (20 ms)
› 1 snapshot written.
Snapshot Summary
› 1 snapshot written from 1 test suite.
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 1 written, 1 total
Time: 1.749 s, estimated 2 s
Ran all test suites.
Watch Usage
› Press f to run only failed tests.
› Press o to only run tests related to changed files.
› Press p to filter by a filename regex pattern.
› Press t to filter by a test name regex pattern.
› Press q to quit watch mode.
› Press Enter to trigger a test run.
Also, we’ve written a snapshot test using toMatchSnapshot
, so you can see that a snapshot file is created in the __snapshots__
directory.
Completed
Done! We’ve seen how to configure a test environment in a TypeScript
-based React
project created using Vite
. Now you can write test code using Jest
and React Testing Library
to develop a safe and stable React
project.
Was my blog helpful? Please leave a comment at the bottom. it will be a great help to me!
App promotion
Deku
.Deku
created the applications with Flutter.If you have interested, please try to download them for free.