Jest 是一個簡單易用的 JavaScript 測試框架。最初由 Meta 公司團隊維護。2022 年 5 月,Meta 公司正式將自己的開源項目Jest 移交給 OpenJS Foundation[1],這表示 Jest 由公司驅動變為社區驅動,有 OpenJS Foundation 保底,Jest 將不會因公司發展需要而停止維護。
下面我們就來學習吧。
首先創建項目目錄:
mkdir jest-demos && cd jest-demosnpm init -y
然后,安裝 Jest 依賴:
npm install --save-dev jest
創建待測試文件 src/sum.js:
function sum(a, b) { return a + b;}module.exports = sum;
創建測試文件 __tests__/sum.test.js:
const sum = require('../src/sum');test('adds 1 + 2 to equal 3', () => { expect(sum(1, 2)).toBe(3);});
注:按照約定,測試文件以 .test.js 或 .spec.js 結尾,并且放在 __tests__ 目錄中。
package.json 文件中增加腳本:
{ "scripts": { "test": "jest" }}
終端上執行命令 npm test,查看結果。
圖片
這樣我們就完成了第一個測試文件的編寫和集成。
不過目前存在 2 個問題:
如何解決呢?有 2 個方案:
不過為了得到完整的類型檢查支持,我們選擇 ts-jest。下面就來學習。
ts-jest 本質上就是 Jest transformer,支持你在 TypeScript 項目里使用 Jest。
這部分配置我們參照官方教程[2]。
首先安裝必要依賴:
npm install --save-dev ts-jest jest typescript @types/jest
然后,生成 Jest 配置文件——這里借助 ts-jest 指令來生成:
npx ts-jest config:init
這一步會在項目根目錄下創建 jest.config.js 文件:
/** @type {import('ts-jest').JestConfigWithTsJest} */module.exports = { preset: 'ts-jest', testEnvironment: 'node',};
將 src/sum.js 和 __tests__/sum.test.js 的文件后綴改成 .ts,并將代碼改成 ES Module 方式組織。
// src/sum.tsfunction sum(a, b) { return a + b;}export default sum;
// __tests__/sum.test.tsimport sum from "../src/sum";test("adds 1 + 2 to equal 3", () => { expect(sum(1, 2)).toBe(3);});
終端上執行命令 npm test,查看結果。
圖片
也成功了。不過有一條告警,建議我們將 tsconfig.json 中的 esModuleinterop 字段設置成 true。
為了設置 esModuleinterop 字段,我們將 tsconfig.json 文件釋放出來。
$ npx tsx --initCreated a new tsconfig.json with: TS target: es2016 module: commonjs strict: true esModuleInterop: true skipLibCheck: true forceConsistentCasingInFileNames: true
釋出的配置中包含 esModuleInterop: true 選擇,因此我們也無需修改。不過因為開啟了嚴格模式(strict: true),因此還要對源代碼做類型注解。
// src/sum.tsfunction sum(a: number, b: number) { return a + b;}export default sum;
再次運行測試——成功!
圖片
以上,我們就學完了 Jest 基礎使用和配置的部分的內容。下一步大家可以在 Jest 官網上按照下面的順序自行學習。
[1]OpenJS Foundation:https://jestjs.io/blog
[2]官方教程:https://kulshekhar.github.io/ts-jest/docs/getting-started/installation
[3]匹配器(Matcher)的使用:https://jestjs.io/docs/using-matchers
[4]https://jestjs.io/docs/expect:https://jestjs.io/docs/expect
[5]測試異步代碼:https://jestjs.io/docs/asynchronous
[6]使用跟啟動、清理相關的一些調用周期函數:https://jestjs.io/docs/setup-teardown
[7]學習 Mock 函數的使用:https://jestjs.io/docs/mock-functions
[8]如何配置瀏覽器環境的測試:https://jestjs.io/docs/tutorial-jquery
本文鏈接:http://www.www897cc.com/showinfo-26-17784-0.htmlJest:目前最廣泛使用的前端 JavaScript 測試框架
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com