Getting Started
通过npm
来安装Jest︰
npm install --save-dev jest
或者通过yarn
:
yarn add --dev jest
让我们从写一个两个数相加的示例函数开始。首先,创建一个 sum.js
文件︰
function sum(a, b) { return a + b; } module.exports = sum;
然后,创建一个名为 sum.test.js
的文件。这将包含我们的实际测试︰
const sum = require('./sum'); test('adds 1 + 2 to equal 3', () => { expect(sum(1, 2)).toBe(3); });
将下面的配置部分添加到你的 package.json
里面:
{ "scripts": { "test": "jest" } }
最后,运行 npm test
,Jest将会打印以下消息︰
PASS ./sum.test.js ✓ adds 1 + 2 to equal 3 (5ms)
你刚刚成功地写了第一个Jest测试 !
此测试使用 expect
和 toBe
来测试两个值完全相同。 若要了解Jest关于测试方面更多的能力,请参阅 Using Matchers。
在命令行运行 #
你可以直接通过 CLI 运行 Jest (如果它已经在你的全局路径 PATH
中,比如通过 npm install -g jest
来安装) ,并指定各种有用的选项。
这里演示了如何对能匹配到 my-test
的文件运行 Jest、使用config.json
作为一个配置文件、并在运行完成后显示一个原生的操作系统通知。
jest my-test --notify --config=config.json
如果你愿意了解更多关于通过命令行运行 jest
的内容,请继续阅读 Jest CLI 选项 页面。
更多配置 #
使用 Babel #
要使用 Babel,请安装 babel-jest
和 regenerator-runtime
两个包:
npm install --save-dev babel-jest regenerator-runtime
注意:如果你使用了 npm
3 或 4,或者 Yarn,就不用再显式的安装 regenerator-runtime
这个包了。
别忘了在你的项目根文件夹下添加一个 .babelrc
配置文件。 比如,如果你正在通过 babel-preset-es2015
和 babel-preset-react
这两个 presets 来使用 ES6 和 React.js:
{ "presets": ["es2015", "react"] }
现在你就完成了使用所有 ES6 特性和 React 特殊语法所需的配置了。
注意:如果你正在使用一个更复杂的 Babel 配置,并使用 Babel 的
env
选项,请记住 Jest 将会自动定义NODE_ENV
为test
。 它不会像 Babel 那样在NODE_ENV
没有被设置时默认使用development
。Note: If you've turned off transpilation of ES2015 modules with the option
{ "modules": false }
, you have to make sure to turn this on in your test enviornment.
{ "presets": [["es2015", { "modules": false }], "react"], "env": { "test": { "presets": [["es2015"], "react"] } } }
注意:当你安装 Jest 时,
babel-jest
是会被自动安装的,并且如果你的项目下存在一个 Babel 配置文件时,它将会自动对相关文件进行转义。 如果要避免这个行为,你可以显式的重置transform
配置项:
// package.json { "jest": { "transform": {} } }
使用 webpack #
Jest 可以用于使用 webpack 来管理资源、 样式和编译的项目中。 webpack 与其他工具相比多了一些独特的挑战。 参考 webpack 指南 来开始起步。
使用 TypeScript #
要在测试用例中使用 TypeScript,需要安装 ts-jest
包和 jest 的 types。
npm install --save-dev ts-jest @types/jest
然后修改你的 package.json
文件,加入 jest
的相关配置,类似下面这样:
{ "jest": { "transform": { "^.+\\.tsx?$": "<rootDir>/node_modules/ts-jest/preprocessor.js" }, "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(tsx?|jsx?)$", "moduleFileExtensions": [ "ts", "tsx", "js", "json", "jsx" ] } }