Closed9
Vite+React環境にJestのセットアップをする
この辺を参考にしてみる
Jestと型定義ファイルをインストール
yarn add -D jest ts-jest @types/jest
testing-libraryをインストール
yarn add -D @testing-library/react @testing-library/jest-dom
以下のようなエラーが発生したので、babelを導入する。
発生したエラー
Support for the experimental syntax 'jsx' isn't currently enabled
yarn add -D babel-jest @babel/preset-env @babel/preset-react
touch babel.config.js
babel.config.js
module.exports = {
presets: ['@babel/preset-env', '@babel/preset-react'],
}
jestの設定もしておく必要がある
touch jest.config.js
テストのファイルが、.tsまたは.tsxの時に、ts-jestを使用するように設定している。また、typescriptの設定ファイル(tsconfig.json)も読み込んでいる。
jest.config.js
module.exports = {
moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx'],
transform: {
'^.+\\.(ts|tsx)$': 'ts-jest',
},
globals: {
'ts-jest': {
tsconfig: 'tsconfig.json',
},
},
}
エイリアスの設定をJest側でもしないといけない。
発生しているエラー
Cannot find module '~/pages' from 'src/router/routes.tsx'
jest.config.js
module.exports = {
moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx'],
transform: {
'^.+\\.(ts|tsx)$': 'ts-jest',
},
globals: {
'ts-jest': {
tsconfig: 'tsconfig.json',
},
},
+ moduleNameMapper: {
+ '^~/(.+)': '<rootDir>/src/$1',
+ },
}
svgファイルがうまく読み込めず、エラーが発生
発生しているエラー
***/src/assets/logo.svg:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3">
SyntaxError: Unexpected token '<'
4 |
> 5 | import logo from '~/assets/logo.svg'
| ^
mkdir -p jest
touch jest/cssTransform.js jest/svgTransform.js
jest/cssTransform.js
module.exports = {
process() {
return 'module.exports = {};'
},
getCacheKey() {
// The output is always the same.
return 'cssTransform'
},
}
jest/svgTransform.js
module.exports = {
process() {
return 'module.exports = {};'
},
getCacheKey() {
// The output is always the same.
return 'svgTransform'
},
}
jest.config.js
module.exports = {
moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx'],
transform: {
'^.+\\.(ts|tsx)$': 'ts-jest',
+ '^.+\\.svg$': '<rootDir>/jest/svgTransform.js',
+ '^.+\\.css$': '<rootDir>/jest/cssTransform.js',
},
globals: {
'ts-jest': {
tsconfig: 'tsconfig.json',
},
},
moduleNameMapper: {
'^~/(.+)': '<rootDir>/src/$1',
},
}
発生しているエラー
● renders learn react link
The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string.
Consider using the "jsdom" test environment.
ReferenceError: document is not defined
jest.config.jsにjsdomの指定をする必要がある
jest.config.js
module.exports = {
moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx'],
transform: {
'^.+\\.(ts|tsx)$': 'ts-jest',
'^.+\\.svg$': '<rootDir>/jest/svgTransform.js',
'^.+\\.css$': '<rootDir>/jest/cssTransform.js',
},
globals: {
'ts-jest': {
tsconfig: 'tsconfig.json',
},
},
moduleNameMapper: {
'^~/(.+)': '<rootDir>/src/$1',
},
+ testEnvironment: 'jsdom',
}
発生しているエラー
TypeError: expect(...).toBeInTheDocument is not a function
@testing-library/reactをセットアップ時に読み込む必要がある
touch jest.setup.ts
jest.setup.ts
// Learn more: https://github.com/testing-library/jest-dom
import '@testing-library/jest-dom/extend-expect'
jest.config.js
module.exports = {
moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx'],
transform: {
'^.+\\.(ts|tsx)$': 'ts-jest',
'^.+\\.svg$': '<rootDir>/jest/svgTransform.js',
'^.+\\.css$': '<rootDir>/jest/cssTransform.js',
},
globals: {
'ts-jest': {
tsconfig: 'tsconfig.json',
},
},
moduleNameMapper: {
'^~/(.+)': '<rootDir>/src/$1',
},
+ setupFilesAfterEnv: ['<rootDir>/jest.setup.ts'],
testEnvironment: 'jsdom',
}
このスクラップは2021/12/21にクローズされました