如何用 jest 和 typescript 测试一个基本的反应功能组件
How to test with jest and typescript with types a basic react function component
这有点令人震惊,但我已经花了很长时间试图找到一个简单的例子来说明如何使用 jest 和 typescript 测试一个愚蠢的 React 组件,但我无法成功。
我看过:
https://basarat.gitbooks.io/typescript/content/docs/testing/jest.html
没有任何效果。大多数时候我得到
Test suite failed to run
'App' refers to a value, but is being used as a type here.
我是新来的反应和笑话。我试过反应测试渲染器和酶。在这个阶段我也不介意,最不可知的可能会很棒。
我有:
这是我的 package.json
{
"name": "web",
"version": "1.0.0",
"description": "mySample",
"main": "index.js",
"scripts": {
"build-dev": "webpack --watch",
"build": "webpack",
"start-dev": "nodemon build/server.js",
"start": "node build/server.js",
"test": "jest"
},
"dependencies": {
"express": "^4.17.1",
"react": "^16.8.6",
"react-dom": "^16.8.6"
},
"devDependencies": {
"@types/enzyme": "^3.10.3",
"@types/express": "^4.17.0",
"@types/jest": "^24.0.16",
"@types/node": "^12.6.9",
"@types/react": "^16.8.24",
"@types/react-dom": "^16.8.5",
"enzyme": "^3.10.0",
"jest": "^24.8.0",
"nodemon": "^1.19.1",
"ts-jest": "^24.0.2",
"ts-loader": "^6.0.4",
"typescript": "^3.5.3",
"webpack": "^4.39.1",
"webpack-cli": "^3.3.6",
"webpack-node-externals": "^1.7.2"
}
}
如您所见,我希望使用打字稿进行强类型测试,这就是我需要酶类型的原因。
我有一个愚蠢的反应组件 App.tsx
import * as React from "react";
interface WelcomeProps {
name: string;
}
const App: React.FC<WelcomeProps> = ({ name }) => {
return <h1>Hello, {name}</h1>;
};
export default App;
我想要一个测试文件App.test.ts
我只是简单地测试了给定 <App name="whatever" />
渲染,DOM 应该有 <h1>Hello, whatever</h1>
我的尝试是:
import * as React from "react";
import App from "./App";
import { shallow } from "enzyme";
describe("App component", () => {
it("returns the name passed as props", () => {
const app = shallow(<App name="test" />);
expect(app).toMatchSnapshot();
});
});
它因上述错误而失败,而且 VS Code 在浅参数上显示错误,就好像它不理解 JSX。
如果需要,我的 jest.config.js
是:
module.exports = {
roots: ["<rootDir>/src"],
transform: {
"^.+\.tsx?$": "ts-jest"
}
};
没有比这更简单的了,但我失败了!
PS:我找到的绝大多数文章都不使用打字稿和类型定义,但这是我想要的。
更新: 虽然这已被接受,但下面的@alphamz 提供了更好的答案(.tsx 与 .ts)。也就是说,我仍然建议 create-react-app 或 create-next-app(在 2021 年会好得多)给想要快速起床 运行ning 的 React 新手,然后你就开始了经过时间考验的好设置。
原回答:
对于像你这样的 React
和 Jest
的新手,我强烈建议从 Create-React-App
开始,扩展名为 Typescript
https://facebook.github.io/create-react-app/docs/adding-typescript
这为支持开玩笑的 TS 使用提供了良好的基线(也有相当强大的应用程序默认设置)
yarn create react-app my-app --typescript
从那里开始,在此处使用 React-Testing-Library
:
https://testing-library.com/docs/react-testing-library/intro
你可以这样写测试
import { render } from 'react-testing-library';
test('init GameTotaler', () => {
const myName: string = 'foo';
const { getByText } = render(
<App name={foo} />
);
expect(getByText(`Hello, ${foo}`)).toBeTruthy();
});
@testing-library(react-testing-library 是其中的一部分)写得非常好,得到了 Kent C. Dodds 的支持,他是 React 文章和一般测试方面非常强大的作者。
他最近写了为什么浅层渲染(这是在 Enzyme 中所做的)可能是一种反模式(至少对他而言)- https://kentcdodds.com/blog/why-i-never-use-shallow-rendering
请注意 create-react-app
确实在其生成的框架中隐藏了一些东西,但得到了很好的支持。
一个强大的优势——如果你想在它生成你的代码库后完全退出 create-react-app,你可以 运行 react-scripts eject
然后你就可以看到秘诀了拥有完全可构建的代码库。
希望这对您有所帮助 - 祝您好运!
reactjs.org recommends React 测试库。
如果您想将它与 Jest 一起使用并且还需要测试 Typescript 代码,那么您可能会看看 crisp-react sample project. It has a React client and the tests can be found here。
我知道这是一个老问题,但我遇到了同样的问题,它有一个简单的解决方案:您的文件名必须有 .tsx 扩展名才能使用 jsx 标签。
这有点令人震惊,但我已经花了很长时间试图找到一个简单的例子来说明如何使用 jest 和 typescript 测试一个愚蠢的 React 组件,但我无法成功。
我看过:
https://basarat.gitbooks.io/typescript/content/docs/testing/jest.html
没有任何效果。大多数时候我得到
Test suite failed to run
'App' refers to a value, but is being used as a type here.
我是新来的反应和笑话。我试过反应测试渲染器和酶。在这个阶段我也不介意,最不可知的可能会很棒。
我有: 这是我的 package.json
{
"name": "web",
"version": "1.0.0",
"description": "mySample",
"main": "index.js",
"scripts": {
"build-dev": "webpack --watch",
"build": "webpack",
"start-dev": "nodemon build/server.js",
"start": "node build/server.js",
"test": "jest"
},
"dependencies": {
"express": "^4.17.1",
"react": "^16.8.6",
"react-dom": "^16.8.6"
},
"devDependencies": {
"@types/enzyme": "^3.10.3",
"@types/express": "^4.17.0",
"@types/jest": "^24.0.16",
"@types/node": "^12.6.9",
"@types/react": "^16.8.24",
"@types/react-dom": "^16.8.5",
"enzyme": "^3.10.0",
"jest": "^24.8.0",
"nodemon": "^1.19.1",
"ts-jest": "^24.0.2",
"ts-loader": "^6.0.4",
"typescript": "^3.5.3",
"webpack": "^4.39.1",
"webpack-cli": "^3.3.6",
"webpack-node-externals": "^1.7.2"
}
}
如您所见,我希望使用打字稿进行强类型测试,这就是我需要酶类型的原因。
我有一个愚蠢的反应组件 App.tsx
import * as React from "react";
interface WelcomeProps {
name: string;
}
const App: React.FC<WelcomeProps> = ({ name }) => {
return <h1>Hello, {name}</h1>;
};
export default App;
我想要一个测试文件App.test.ts
我只是简单地测试了给定 <App name="whatever" />
渲染,DOM 应该有 <h1>Hello, whatever</h1>
我的尝试是:
import * as React from "react";
import App from "./App";
import { shallow } from "enzyme";
describe("App component", () => {
it("returns the name passed as props", () => {
const app = shallow(<App name="test" />);
expect(app).toMatchSnapshot();
});
});
它因上述错误而失败,而且 VS Code 在浅参数上显示错误,就好像它不理解 JSX。
如果需要,我的 jest.config.js
是:
module.exports = {
roots: ["<rootDir>/src"],
transform: {
"^.+\.tsx?$": "ts-jest"
}
};
没有比这更简单的了,但我失败了!
PS:我找到的绝大多数文章都不使用打字稿和类型定义,但这是我想要的。
更新: 虽然这已被接受,但下面的@alphamz 提供了更好的答案(.tsx 与 .ts)。也就是说,我仍然建议 create-react-app 或 create-next-app(在 2021 年会好得多)给想要快速起床 运行ning 的 React 新手,然后你就开始了经过时间考验的好设置。
原回答:
对于像你这样的 React
和 Jest
的新手,我强烈建议从 Create-React-App
开始,扩展名为 Typescript
https://facebook.github.io/create-react-app/docs/adding-typescript
这为支持开玩笑的 TS 使用提供了良好的基线(也有相当强大的应用程序默认设置)
yarn create react-app my-app --typescript
从那里开始,在此处使用 React-Testing-Library
:
https://testing-library.com/docs/react-testing-library/intro
你可以这样写测试
import { render } from 'react-testing-library';
test('init GameTotaler', () => {
const myName: string = 'foo';
const { getByText } = render(
<App name={foo} />
);
expect(getByText(`Hello, ${foo}`)).toBeTruthy();
});
@testing-library(react-testing-library 是其中的一部分)写得非常好,得到了 Kent C. Dodds 的支持,他是 React 文章和一般测试方面非常强大的作者。
他最近写了为什么浅层渲染(这是在 Enzyme 中所做的)可能是一种反模式(至少对他而言)- https://kentcdodds.com/blog/why-i-never-use-shallow-rendering
请注意 create-react-app
确实在其生成的框架中隐藏了一些东西,但得到了很好的支持。
一个强大的优势——如果你想在它生成你的代码库后完全退出 create-react-app,你可以 运行 react-scripts eject
然后你就可以看到秘诀了拥有完全可构建的代码库。
希望这对您有所帮助 - 祝您好运!
reactjs.org recommends React 测试库。
如果您想将它与 Jest 一起使用并且还需要测试 Typescript 代码,那么您可能会看看 crisp-react sample project. It has a React client and the tests can be found here。
我知道这是一个老问题,但我遇到了同样的问题,它有一个简单的解决方案:您的文件名必须有 .tsx 扩展名才能使用 jsx 标签。