日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

Jest:目前最廣泛使用的前端 JavaScript 測(cè)試框架

來源: 責(zé)編: 時(shí)間:2023-11-08 17:03:21 261觀看
導(dǎo)讀Jest 是一個(gè)簡(jiǎn)單易用的 JavaScript 測(cè)試框架。最初由 Meta 公司團(tuán)隊(duì)維護(hù)。2022 年 5 月,Meta 公司正式將自己的開源項(xiàng)目Jest 移交給 OpenJS Foundation[1],這表示 Jest 由公司驅(qū)動(dòng)變?yōu)樯鐓^(qū)驅(qū)動(dòng),有 OpenJS Foundation 保

Jest 是一個(gè)簡(jiǎn)單易用的 JavaScript 測(cè)試框架。最初由 Meta 公司團(tuán)隊(duì)維護(hù)。2022 年 5 月,Meta 公司正式將自己的開源項(xiàng)目Jest 移交給 OpenJS Foundation[1],這表示 Jest 由公司驅(qū)動(dòng)變?yōu)樯鐓^(qū)驅(qū)動(dòng),有 OpenJS Foundation 保底,Jest 將不會(huì)因公司發(fā)展需要而停止維護(hù)。90l28資訊網(wǎng)——每日最新資訊28at.com

下面我們就來學(xué)習(xí)吧。90l28資訊網(wǎng)——每日最新資訊28at.com

快速上手

初始化項(xiàng)目

首先創(chuàng)建項(xiàng)目目錄:90l28資訊網(wǎng)——每日最新資訊28at.com

mkdir jest-demos && cd jest-demosnpm init -y

然后,安裝 Jest 依賴:90l28資訊網(wǎng)——每日最新資訊28at.com

npm install --save-dev jest

第一個(gè)測(cè)試文件

創(chuàng)建待測(cè)試文件 src/sum.js:90l28資訊網(wǎng)——每日最新資訊28at.com

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

創(chuàng)建測(cè)試文件 __tests__/sum.test.js:90l28資訊網(wǎng)——每日最新資訊28at.com

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

注:按照約定,測(cè)試文件以 .test.js 或 .spec.js 結(jié)尾,并且放在 __tests__ 目錄中。90l28資訊網(wǎng)——每日最新資訊28at.com

package.json 文件中增加腳本:90l28資訊網(wǎng)——每日最新資訊28at.com

{  "scripts": {    "test": "jest"  }}

終端上執(zhí)行命令 npm test,查看結(jié)果。90l28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片90l28資訊網(wǎng)——每日最新資訊28at.com

這樣我們就完成了第一個(gè)測(cè)試文件的編寫和集成。90l28資訊網(wǎng)——每日最新資訊28at.com

存在的問題

不過目前存在 2 個(gè)問題:90l28資訊網(wǎng)——每日最新資訊28at.com

  • Jest 只支持 CommonJS 代碼,并不支持 ES Module 代碼,為了測(cè)試 ES Module 代碼,我們只能將 ES Module 代碼轉(zhuǎn)換為 CommonJS 代碼
  • Jest 也不支持 TypeScript 代碼

如何解決呢?有 2 個(gè)方案:90l28資訊網(wǎng)——每日最新資訊28at.com

  1. 使用 Babel + @babel/preset-env + @babel/preset-typescript 的組合,或者
  2. 使用 ts-jest(基于 TypeScript)

不過為了得到完整的類型檢查支持,我們選擇 ts-jest。下面就來學(xué)習(xí)。90l28資訊網(wǎng)——每日最新資訊28at.com

配置 ts-jest

ts-jest 本質(zhì)上就是 Jest transformer,支持你在 TypeScript 項(xiàng)目里使用 Jest。90l28資訊網(wǎng)——每日最新資訊28at.com

這部分配置我們參照官方教程[2]。90l28資訊網(wǎng)——每日最新資訊28at.com

安裝必要依賴

首先安裝必要依賴:90l28資訊網(wǎng)——每日最新資訊28at.com

npm install --save-dev ts-jest jest typescript @types/jest
  • ts-jest 是我們必須要安裝的
  • ts-jest 依賴 jest 和 typescript,因此也安裝下(jest 在上一步已經(jīng)安裝,所以在這里是可選的)
  • 安裝 @types/jest 是為了獲取類型提示支持

生成配置文件

然后,生成 Jest 配置文件——這里借助 ts-jest 指令來生成:90l28資訊網(wǎng)——每日最新資訊28at.com

npx ts-jest config:init

這一步會(huì)在項(xiàng)目根目錄下創(chuàng)建 jest.config.js 文件:90l28資訊網(wǎng)——每日最新資訊28at.com

/** @type {import('ts-jest').JestConfigWithTsJest} */module.exports = {  preset: 'ts-jest',  testEnvironment: 'node',};

修改文件后綴

將 src/sum.js 和 __tests__/sum.test.js 的文件后綴改成 .ts,并將代碼改成 ES Module 方式組織。90l28資訊網(wǎng)——每日最新資訊28at.com

// 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);});

終端上執(zhí)行命令 npm test,查看結(jié)果。90l28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片90l28資訊網(wǎng)——每日最新資訊28at.com

也成功了。不過有一條告警,建議我們將 tsconfig.json 中的 esModuleinterop 字段設(shè)置成 true。90l28資訊網(wǎng)——每日最新資訊28at.com

釋出 tsconfig.json

為了設(shè)置 esModuleinterop 字段,我們將 tsconfig.json 文件釋放出來。90l28資訊網(wǎng)——每日最新資訊28at.com

$ npx tsx --initCreated a new tsconfig.json with:                                                    TS  target: es2016  module: commonjs  strict: true  esModuleInterop: true  skipLibCheck: true  forceConsistentCasingInFileNames: true

釋出的配置中包含 esModuleInterop: true 選擇,因此我們也無需修改。不過因?yàn)殚_啟了嚴(yán)格模式(strict: true),因此還要對(duì)源代碼做類型注解。90l28資訊網(wǎng)——每日最新資訊28at.com

// src/sum.tsfunction sum(a: number, b: number) {  return a + b;}export default sum;

再次運(yùn)行測(cè)試——成功!90l28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片90l28資訊網(wǎng)——每日最新資訊28at.com

下一步

以上,我們就學(xué)完了 Jest 基礎(chǔ)使用和配置的部分的內(nèi)容。下一步大家可以在 Jest 官網(wǎng)上按照下面的順序自行學(xué)習(xí)。90l28資訊網(wǎng)——每日最新資訊28at.com

  1. 學(xué)習(xí)匹配器(Matcher)的使用[3],常用的匹配器有 .toBe()、.toEqual() 和 .toStrictEqual(),完整列表參見這里:https://jestjs.io/docs/expect[4]
  2. 學(xué)習(xí)如何測(cè)試異步代碼[5],主要有 2 種異步調(diào)用方式:回調(diào)和 Promise。回調(diào)是通過 done 函數(shù),Promise 則有多種測(cè)試方式:直接返回、使用 async await、或者配合前面任意種一方式直接丟給 expect 函數(shù)(類似 return|await expect(promise).resolves|rejects.toBe())
  3. 學(xué)習(xí)使用跟啟動(dòng)、清理相關(guān)的一些調(diào)用周期函數(shù)[6]。比如:beforeAll()、beforeEach()。同時(shí) Jest 還提供了類似 test.only()/describe.only() 的函數(shù),讓你僅測(cè)試一小部分的代碼
  4. 學(xué)習(xí) Mock 函數(shù)的使用[7]。這部分的內(nèi)容經(jīng)常會(huì)用到,比如 Mock 函數(shù)的創(chuàng)建、實(shí)現(xiàn)和使用、如果 Mock 第三方模塊(全部和局部)
  5. 學(xué)習(xí)如何配置瀏覽器環(huán)境的測(cè)試[8](利用 jsdom),需要安裝 jest-environment-jsdom

References

[1]OpenJS Foundation:https://jestjs.io/blog90l28資訊網(wǎng)——每日最新資訊28at.com

[2]官方教程:https://kulshekhar.github.io/ts-jest/docs/getting-started/installation90l28資訊網(wǎng)——每日最新資訊28at.com

[3]匹配器(Matcher)的使用:https://jestjs.io/docs/using-matchers90l28資訊網(wǎng)——每日最新資訊28at.com

[4]https://jestjs.io/docs/expect:https://jestjs.io/docs/expect90l28資訊網(wǎng)——每日最新資訊28at.com

[5]測(cè)試異步代碼:https://jestjs.io/docs/asynchronous90l28資訊網(wǎng)——每日最新資訊28at.com

[6]使用跟啟動(dòng)、清理相關(guān)的一些調(diào)用周期函數(shù):https://jestjs.io/docs/setup-teardown90l28資訊網(wǎng)——每日最新資訊28at.com

[7]學(xué)習(xí) Mock 函數(shù)的使用:https://jestjs.io/docs/mock-functions90l28資訊網(wǎng)——每日最新資訊28at.com

[8]如何配置瀏覽器環(huán)境的測(cè)試:https://jestjs.io/docs/tutorial-jquery90l28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-17765-0.htmlJest:目前最廣泛使用的前端 JavaScript 測(cè)試框架

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: Python模塊化開發(fā):構(gòu)建可重用、可維護(hù)的代碼

下一篇: Python 既是解釋型語言,也是編譯型語言

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 主站蜘蛛池模板: 忻州市| 突泉县| 育儿| 河津市| 湟中县| 盘山县| 金寨县| 石屏县| 璧山县| 凤台县| 芦溪县| 扶风县| 阳西县| 南阳市| 彭水| 安乡县| 伊金霍洛旗| 扎赉特旗| 望城县| 河间市| 阳曲县| 黑山县| 馆陶县| 慈溪市| 红原县| 庆安县| 铜鼓县| 茶陵县| 武山县| 弥渡县| 天等县| 从江县| 吉首市| 汝阳县| 巩义市| 迁西县| 苍南县| 邯郸市| 禹州市| 贵港市| 新郑市|