首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为react typescript项目设置ts-jest

为react typescript项目设置ts-jest
EN

Stack Overflow用户
提问于 2018-07-03 15:07:20
回答 5查看 23.1K关注 0票数 15

我正在尝试为一个用typescript编写的react项目设置测试环境。我以前做过react,但用的是ES6。

下面是我的package.json的相关部分:

代码语言:javascript
复制
 "scripts": {
    "test": "NODE_ENV=test jest",
    "build": "webpack --mode production",
    "start": "webpack-dev-server --open --mode development"
  },
  "jest": {
    "moduleNameMapper": {
      "\\.(css)$": "jest-css-modules"
    },
    "transform": {
      "\\.(ts|tsx)$": "ts-jest"
    },
    "testRegex": ".test.(ts|tsx?)$",
    "moduleFileExensions": ["ts", "tsx", "js", "jsx", "json", "node"]
  },

我想提一下,我指望的是ts转译器,而根本没有配置babel。

以下是我包含的依赖项:

代码语言:javascript
复制
"dependencies": {
    "@types/jest": "^23.1.4",
    "@types/react": "^16.4.5",
    "@types/react-dom": "^16.0.6",
    "@types/react-redux": "^6.0.3",
    "@types/redux": "^3.6.0",
    "deep-freeze": "0.0.1",
    "jest": "^23.2.0",
    "jest-css-modules": "^1.1.0",
    "react-redux": "^5.0.7",
    "redux": "^4.0.0",
    "ts-jest": "^23.0.0",
    "webpack": "^4.12.2"
  },
  "devDependencies": {
    "awesome-typescript-loader": "^5.2.0",
    "css-loader": "^0.28.11",
    "html-loader": "^0.5.5",
    "html-webpack-plugin": "^3.2.0",
    "prop-types": "^15.6.2",
    "react": "^16.4.1",
    "react-dom": "^16.4.1",
    "style-loader": "^0.21.0",
    "typescript": "^2.9.2",
    "typings-for-css-modules-loader": "^1.7.0",
    "url-loader": "^1.0.1",
    "webpack-cli": "^3.0.8",
    "webpack-dev-server": "^3.1.4"
  }

当我运行npm run test时,我无法理解以下错误,因为我已经在转换中安装并指定了ts-jest -

代码语言:javascript
复制
Validation Error:

  Module ts-jest in the transform option was not found.
         <rootDir> is: /Users/rahul/ot/Lab/webpack-playlist

下面是tsconfig.json的外观

代码语言:javascript
复制
{
  "compilerOptions": {
    "jsx": "react",
    "noImplicitAny": true,
    "sourceMap": true,
    "target": "es5"
  }
}

不确定如何解决上面的错误。

我也尝试了在tsconfig.json中配置ts-jest,如下所示,但仍然给出了相同的错误-

代码语言:javascript
复制
// tsconfig.json
    "jest": {
        "globals": {
          "ts-jest": {
            "tsConfigFile": "tsconfig.jest.json"
          }
        }
      }


// tsconfig.jest.json
{
  "extends": "./tsconfig",
  "compilerOptions": {
    "module": "commonjs"
  }
}
EN

回答 5

Stack Overflow用户

发布于 2018-08-24 05:38:23

浏览一下,这里的设置与我的设置没有太大不同:

https://github.com/jasonraimondi/typescript-react-starter

在您的jest配置中有一些细微的差异。下面是我的jest.config.js文件的内容。

代码语言:javascript
复制
module.exports = {
  "transform": {
    "^.+\\.tsx?$": "ts-jest"
  },
  "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$",
  "moduleFileExtensions": [
    "ts",
    "tsx",
    "js",
    "jsx",
    "json",
    "node"
  ],
  "setupFiles": [
    "<rootDir>/test/setupTests.ts"
  ]
};

我有一篇关于testing a Typescript React App using ts-jest without "create-react-app"的文章,希望能对你有所帮助。

票数 10
EN

Stack Overflow用户

发布于 2019-01-15 04:58:51

以下是在TypeScript React项目中使用Jest的示例设置。我自己创建的,我希望它能帮助你:

jest.config.js

代码语言:javascript
复制
const {defaults} = require('jest-config');

module.exports = {
  bail: true,
  moduleFileExtensions: [...defaults.moduleFileExtensions, 'ts', 'tsx'],
  roots: ['src'],
  testMatch: ['<rootDir>/src/**/?(*.)test.{ts,tsx}'],
  transform: {
    '^.+\\.tsx?$': 'ts-jest',
  },
  verbose: true,
};

package.json

代码语言:javascript
复制
{
  "dependencies": {
    "@types/react": "16.7.18",
    "@types/react-dom": "16.0.11",
    "react": "16.7.0",
    "react-dom": "16.7.0"
  },
  "devDependencies": {
    "jest": "23.6.0",
    "ts-jest": "23.10.5"
  },
  "scripts": {
    "test": "jest"
  },
  "version": "0.0.0"
}

src/Welcome.tsx

代码语言:javascript
复制
import * as React from 'react';

interface WelcomeProps {
  name: string,
}

const Welcome: React.FunctionComponent<WelcomeProps> = (props: WelcomeProps) => {
  return <h1>Hello, {props.name}</h1>;
};

export default Welcome;

src/Welcome.test.tsx

代码语言:javascript
复制
import React from 'react';
import ReactDOM from 'react-dom';

import Welcome from './Welcome';

it('renders without crashing', () => {
  const div = document.createElement('div');
  ReactDOM.render(<Welcome name="John Doe"/>, div);
  ReactDOM.unmountComponentAtNode(div);
});
票数 1
EN

Stack Overflow用户

发布于 2020-07-21 18:01:45

这是唯一对我有效的配置。以下是我的规格:

代码语言:javascript
复制
{
  "name": "project",
  "version": "1.0.0",
  "description": "project",
  "jest": {
    "modulePathIgnorePatterns": [
      "dist/"
    ],
    "snapshotSerializers": [
      "enzyme-to-json/serializer"
    ],
    "moduleNameMapper": {
      "^.+\\.(css|less|scss)$": "identity-obj-proxy"
    },
    "setupFilesAfterEnv": [
      "./setupTests.ts"
    ],
    "coverageReporters": [
      "text",
      "lcov"
    ],
    "coverageDirectory": ".",
    "transform": {
      ".(js|jsx)": "babel-jest",
      ".(ts|tsx)": "ts-jest"
    }
  },
  "peerDependencies": {
    "react": "^16.12.0",
    "react-dom": "^16.12.0"
  },
  "devDependencies": {
    "@types/enzyme": "^3.10.5",
    "@types/enzyme-adapter-react-16": "^1.0.6",
    "@types/jest": "^26.0.4",
    "babel-preset-env": "^1.7.0",
    "babel-preset-react": "^6.24.1",
    "enzyme-adapter-react-16": "^1.12.1",
    "ts-jest": "^26.1.0",
    "typescript": "~3.9.5"
  },
  "scripts": {
    "tsc": "tsc --build tsconfig.json",
    "watch": "tsc --watch",
    "test": "jest",
    "test-coverage": "jest --coverage"
  }
}

setupTests.ts:

代码语言:javascript
复制
import * as Enzyme from 'enzyme';
import * as Adapter from 'enzyme-adapter-react-16';

Enzyme.configure({ adapter: new Adapter() });

最后是我的tsconfig.json:

代码语言:javascript
复制
{
  "compileOnSave": false,
  "compilerOptions": {
    "allowJs": true,
    "declaration": true,
    "declarationMap": true,
    "jsx": "react",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "skipLibCheck": true,
    "noImplicitAny": true,
    "target": "es5",
    "outDir": "./dist",
    "declarationDir": "./dist",
    "lib": ["es2016", "dom"]
  },
  "include": ["./src/index.ts"]
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51148490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档