Jest 從安裝開始

2021-09-23 20:02 更新

使用 ?yarn? 安裝 Jest︰

  1. yarn add --dev jest

或使用 ?npm? 安裝 Jest:

  1. npm install --save-dev jest

注:Jest的文檔統(tǒng)一使用?yarn?命令,不過使用?npm?也是可行的。 你可以在yarn的說明文檔里看到?yarn與?npm?之間的對(duì)比。

讓我們開始為一個(gè)假設(shè)函數(shù)編寫測(cè)試,該函數(shù)將兩個(gè)數(shù)字相加。 首先,創(chuàng)建一個(gè)?sum.js ?文件:

  1. function sum(a, b) {
  2. return a + b;
  3. }
  4. module.exports = sum;

然后,創(chuàng)建一個(gè)名為? sum.test.js? 的文件。 這將包含我們的實(shí)際測(cè)試:

  1. const sum = require('./sum');
  2. test('adds 1 + 2 to equal 3', () => {
  3. expect(sum(1, 2)).toBe(3);
  4. });

將下面的配置部分添加到你的? package.json? 里面:

  1. {
  2. "scripts": {
  3. "test": "jest"
  4. }
  5. }

最后,運(yùn)行? yarn test? 或 ?npm run test? ,Jest將打印下面這個(gè)消息:

  1. PASS ./sum.test.js
  2. ? adds 1 + 2 to equal 3 (5ms)

如此一來,你就成功地寫出第一個(gè)Jest測(cè)試 !

此測(cè)試使用 ?expect ?和 ?toBe ?來測(cè)試兩個(gè)值完全相同。 若要了解Jest關(guān)于測(cè)試方面更多的能力,請(qǐng)參閱使用適配器。

在命令行運(yùn)行

你可以通過命令行直接運(yùn)行?Jest?(前提是?jest?已經(jīng)處于你的環(huán)境變量 ?PATH?中,例如通過 ?yarn global add jest? 或 ?npm install jest --global?安裝的?Jest?) ,并為其指定各種有用的配置項(xiàng)。

這里演示了如何對(duì)能匹配到 ?my-test? 的文件運(yùn)行 ?Jest?、使用?config.json ?作為一個(gè)配置文件,并在運(yùn)行完成后顯示一個(gè)原生的操作系統(tǒng)通知。

  1. jest my-test --notify --config=config.json

如果你想要了解更多關(guān)于通過命令行來運(yùn)行 ?jest ?的內(nèi)容,請(qǐng)繼續(xù)閱讀 Jest CLI 選項(xiàng) 頁面。

更多配置

生成一個(gè)基礎(chǔ)配置文件

基于你的項(xiàng)目,Jest將會(huì)提出幾個(gè)問題,并將創(chuàng)建一個(gè)基本的配置文件,每個(gè)選項(xiàng)都有一個(gè)簡(jiǎn)短的說明:

  1. jest --init

使用 Babel

如果需要使用 Babel,可以通過 ?yarn?來安裝所需的依賴。

  1. yarn add --dev babel-jest @babel/core @babel/preset-env

可以在工程的根目錄下創(chuàng)建一個(gè)?babel.config.js?文件用于配置與你當(dāng)前Node版本兼容的Babel:

  1. // babel.config.js
  2. module.exports = {
  3. presets: [
  4. [
  5. '@babel/preset-env',
  6. {
  7. targets: {
  8. node: 'current',
  9. },
  10. },
  11. ],
  12. ],
  13. };

Babel的配置取決于具體的項(xiàng)目使用場(chǎng)景 ,可以查閱 Babel官方文檔來獲取更多詳細(xì)的信息。

使 Babel 配置具有 jest-aware

如果沒有設(shè)置為其他內(nèi)容,Jest 將設(shè)置?process.env.NODE_ENV?為?'test'?。你可以在配置中使用它來有條件地僅設(shè)置 Jest 所需的編譯,例如

  1. // babel.config.js
  2. module.exports = api => {
  3. const isTest = api.env('test');
  4. // You can use isTest to determine what presets and plugins to use.
  5. return {
  6. // ...
  7. };
  8. };
注意:當(dāng)你安裝 Jest 時(shí),?babel-jest? 是會(huì)被自動(dòng)安裝的,并且如果你的項(xiàng)目下存在一個(gè) Babel 配置文件時(shí),它將會(huì)自動(dòng)對(duì)相關(guān)文件進(jìn)行轉(zhuǎn)義。 如果要避免這個(gè)行為,你可以顯式的重置 ?transform? 配置項(xiàng):
  1. // jest.config.js
  2. module.exports = {
  3. transform: {},
  4. };

Babel 6 支持

Jest 24 放棄了對(duì) Babel 6 的支持。我們強(qiáng)烈建議大家升級(jí)到 Babel 7,它得到了積極維護(hù)。但是,如果你無法升級(jí)到 Babel 7,請(qǐng)繼續(xù)使用 Jest 23 或升級(jí)到 Jest 24 并?babel-jest?鎖定版本 23,如下例所示:

  1. "dependencies": {
  2. "babel-core": "^6.26.3",
  3. "babel-jest": "^23.6.0",
  4. "babel-preset-env": "^1.7.0",
  5. "jest": "^24.0.0"
  6. }

雖然我們通常建議使用每個(gè) Jest 包的相同版本,但此解決方法將允許你現(xiàn)在繼續(xù)使用最新版本的 Jest 和 Babel 6。

使用 webpack

Jest 可以用于使用 webpack 來管理資源、 樣式和編譯的項(xiàng)目中。 webpack 與其他工具相比多了一些獨(dú)特的挑戰(zhàn)。 參考 webpack 指南 來開始起步。

使用 parcel

Jest 可用于使用parcel bundler管理資產(chǎn)、樣式和編譯(類似于webpack)的項(xiàng)目中。包裹需要零配置。請(qǐng)參考官方文檔開始。

使用 TypeScript

Jest 通過 Babel 支持 TypeScript。首先,請(qǐng)確保你遵循了上面使用 Babel 的說明。接下來,通過?yarn?安裝?@babel/preset-typescript?:

  1. yarn add --dev @babel/preset-typescript

然后添加?@babel/preset-typescript?到你的???babel.config.js?.??

  1. // babel.config.js
  2. module.exports = {
  3. presets: [
  4. ['@babel/preset-env', {targets: {node: 'current'}}],
  5. + '@babel/preset-typescript',
  6. ],
  7. };

不過,在配合使用TypeScript與Babel時(shí),仍然有一些注意事項(xiàng) 。 因?yàn)?Babel 對(duì) TypeScript 的支持是 transpilation,Jest 不會(huì)在運(yùn)行時(shí)對(duì)你的測(cè)試進(jìn)行類型檢查。 如果你想實(shí)現(xiàn)這個(gè)功能,你可以使用 ?ts-jest?。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)