vite test

Yarn

Yarn是一個由Facebook共享的JavaScript包管理器吭产,用于解決團隊使用NPM面臨的少數問題:

  • 安裝時無法保證速度和一致性
  • 安全問題遍略,NPM安裝時允許運行代碼邀摆。

Yarn同時是從NPM注冊源獲取模塊的新CLI客戶端

安裝Yarn

  • 使用NPM全局安裝Yarn
$ node -v
v14.16.0

$ npm -v
6.14.11

$ npm i -g yarn

$ yarn -version
1.22.10

Vite

使用Yarn創(chuàng)建Vite+Vite+TS項目

$ yarn create @vitejs/app web_admin --template vue-ts
$ cd web_admin
$ yarn && yarn dev

集成單元測試

安裝Jest測試單元組件

$ yarn add jest --dev

創(chuàng)建測試目錄

$ mkdir -p tests/unit

創(chuàng)建單元測試腳本玖姑,默認規(guī)定單元測試文件以*.unit.js作為結尾靠益。

$ vim tests/unit/index.unit.js
test("1+1=2", ()=>{
  expect(1 + 1).toBe(2)
})

配置Jest單元測試只尋找以*.test.js*.unit.js文件作為測試文件

$ vim jest.config.js
module.exports = {
    testMatch:[
        "**/?(*.)+(unit|test).[jt]s?(x)"
    ]
}

添加自定義測試命令

$ vim package.json
"scripts": {
  "test:unit":"jest"
},

執(zhí)行測試命令

$ yarn test:unit
 PASS  tests/unit/index.spec.js
  √ 1+1=2 (3 ms)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        16.41 s
Ran all test suites.
Done in 23.15s.

解決測試文件自動提示

$ yarn add @types/jest --dev

安裝對ESM的支持

配置Jest宣决,添加轉換器。轉換器提供同步功能以轉換源文件中的模塊吆你。

$ vim jest.config.js

配置JSX轉換器

module.exports = {
  transform:{"^.+\\.jsx?$":"bebel-jest"}
}

安裝babel-jest插件

$ yarn add babel-jest --dev

配置Babel解析代碼的規(guī)則

$ vim babel.config.js 
module.exports = {
    presets:[["@babel/preset-env", {targets:{node:"current"}}]]
}

安裝預設

$ yarn add @babel/preset-env --dev

測試環(huán)境

$ yarn test:unit

Jest配置解析Vue文件

$ vim jest.config.js
module.exports = {
    transform:{
        "^.+\\.jsx?$":"babel-jest",
        "^.+\\.vue?$":"vue-jest"
    }
}

安裝支持Vue3的vue-jest

$ yarn add vue-jest@next --dev

安裝完成后在Jest單元測試中即可使用import導入Vue組件

安裝支持Vue3的@vue/test-utils

$ yarn add @vue/test-utils@next --dev

安裝Jest支持TS

$ vim jest.config.js
module.exports = {
    transform:{
        "^.+\\.jsx?$":"babel-jest",
        "^.+\\.vue?$":"vue-jest",
        "^.+\\.tsx$":"ts-jest"
    }
}

安裝ts-jest

$ yarn add ts-jest --dev

TypeScrpt

配置Babel支持TypeScript

$ vim babel.config.js
module.exports = {
    presets:[
        ["@babel/preset-env", {targets:{node:"current"}}],
        "@babel/preset-typescript"
    ]
}

安裝@babel/preset-typescript

$ yarn add @babel/preset-typescript --dev

配置TypeScript編譯器選項

$ vim tsconfig.json
{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
    "moduleResolution": "node",
    "strict": true,
    "jsx": "preserve",
    "sourceMap": true,
    "resolveJsonModule": true,
    "esModuleInterop": true,
    "lib": ["esnext", "dom"],
    "types": ["vite/client", "jest"]
  },
  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "tests"]
}

集成E2E測試

Cypress是基于Node.js環(huán)境的UI自動化測試工具弦叶,也是一種E2E(End to End)測試框架,用于解決開發(fā)者與QA工程師在測試現代化應用程序時面臨的關鍵難題妇多。

$ yarn add cypress --dev

配置E2E測試命令

$ vim package.json
{
  "scripts": {
    "test:e2e":"cypress open"
  }
}

運行測試命令驗證是否成功

$ yarn test:e2e
Failed to deserialize the V8 snapshot blob. This can mean that the snapshot blob file is corrupted or missing.

解決方案:刪除 AppData\Local\Cypress\CacheCache目錄后再重新安裝

運行成功后會在根目錄下生成cypress文件夾伤哺,將cypress根目錄下所有文件拷貝到tests/e2e目錄下。然后在根目錄下的cypress.json中配置新的文件路徑者祖。

$ vim cypress.json
{
    "pluginsFile":"tests/e2e/plugins/index.ts",
    "video":false
}

刪除tests/e2e/integration目錄后創(chuàng)建specs文件夾用于存放測試文件立莉,測試文件默認以*.spec.js作為后綴。

將e2e目錄下的JS轉換為TS文件

重新配置Cypress插件選項

$ vim tests/e2e/plugins/index.ts
/**
 * @type {Cypress.PluginConfig}
 */
module.exports = (on, config) => {
  return Object.assign({}, config, {
    fixturesFolder:"tests/e2e/fixtures",
    integrationFolder:"tests/e2e/specs",
    screenshotsFolder:"tests/e2e/screenshots",
    videosFolder:"tests/e2e/videos",
    supportFile:"tests/e2e/support/index.ts"
  })
}

此時運行yarn test:unit單元測試會發(fā)現與yarn test:e2e相互沖突七问,解決的方案是在根目錄下的tsconfig.jsoninclude選項中只包含tests/unit蜓耻。然后在tests/e2e目錄下創(chuàng)建tsconfig.json為其單獨指定TS配置。

$ vim tests/e2e/tsconfig.json
{
    "compilerOptions": {
      "target": "esnext",
      "module": "esnext",
      "moduleResolution": "node",
      "strict": true,
      "jsx": "preserve",
      "sourceMap": true,
      "resolveJsonModule": true,
      "esModuleInterop": true,
      "lib": ["esnext", "dom"],
    }
}

默認執(zhí)行cypress open時會重新開啟一個窗口械巡,若希望在終端中執(zhí)行刹淌,則需要直接在命令行中直接執(zhí)行命令:

$ npm cypress run

package.jsonscripts自定義腳本命令中添加新的命令

$ vim package.json
"test:e2e-cli":"cypress run"

集成代碼質量檢查工具

pre-commit鉤子用于代碼質量檢查,使用yorkie使得鉤子能夠從package.json中的gitHooks屬性中讀取讥耗。

yorkie包用來檢查commit message是否符合規(guī)范

安裝yorkie包

$ yarn add yorkie --dev

package.json配置gitHooks屬性有勾,指定Commit message的規(guī)范,規(guī)范建議采用Angular規(guī)范葛账。

$ vim package.json
"gitHooks": {
  "commit-msg": "node scripts/verify_git_commit.js"
}

添加驗證提交信息的腳本

$ vim scripts/verify_git_commit.js
const chalk = require('chalk')
const msgPath = process.env.GIT_PARAMS
const msg = require('fs').readFileSync(msgPath, 'utf-8').trim()

const commitRE = /^(revert: )?(feat|fix|docs|style|refactor|perf|test|workflow|ci|chore|types)(\(.+\))?: .{1,50}/

if (!commitRE.test(msg)) {
  console.log(msg)
  console.error(
    `  ${chalk.bgRed.white(' ERROR ')} ${chalk.red(`invalid commit message format.`)}\n\n` +
    chalk.red(`  Proper commit message format is required for automated changelog generation. Examples:\n\n`) +
    `    ${chalk.green(`feat(compiler): add 'comments' option`)}\n` +
    `    ${chalk.green(`fix(v-model): handle events on blur (close #28)`)}\n\n` +
    chalk.red(`  See .github/COMMIT_CONVENTION.md for more details.\n`) +
    chalk.red(`  You can also use ${chalk.cyan(`npm run commit`)} to interactively generate a commit message.\n`)
  )
  process.exit(1)
}

安裝chalk包柠衅,用于輸出帶顏色的測試日志。

$ yarn add chalk --dev

集成Eslint

$ yarn add -D typescript eslint eslint-plugin-vue @vue/eslint-config-typescript @typescript-eslint/parser @typescript-eslint/eslint-plugin 

添加eslint配置項

$ vim .eslintrc
{
    "root":true,
    "env":{
        "browser":true,
        "node":true,
        "es2021":true
    },
    "extends":[
        "plugin:vue/vue3-recommended",
        "eslint:recommended",
        "@vue/typescript/recommended"
    ],
    "parserOptions":{
        "ecmaVersion":2021
    }
}

package.jsonscripts屬性中添加對eslint的支持

$ vim package.json
"lint":"eslint --ext .ts,vue src/** --no-error-on-unmatched-pattern"

運行命令測試

$ yarn lint

對于eslint檢測出來的錯誤籍琳,一部分可以修復菲宴。

$ yarn lint --fix

在Git提交時只Lint暫存區(qū)文件,此時需配置gitHooks趋急。

$ vim package.json
"gitHooks":{
   "pre-commit":"lint-staged"
}

安裝lint-staged

$ yarn add -D lint-staged

package.json中添加對lint-staged的配置

$ vim package.json
"lint-staged":{
  "*.{ts,vue}":"eslint --fix"
},

集成代碼美化工具

$ yarn add -D prettier eslint-plugin-prettier @vue/eslint-config-prettier

在ESlint的配置文件.eslintrc中的extends屬性中添加對Prettier的配置

$ vim .eslintrc
"extends":[
  "@vue/prettier",
  "@vue/prettier/@typescript-eslint"
]

查看Prettier幫助

$ npx prettier --help

對項目下所有文件進行美化

$ npx prettier -w -u .

在代碼提交時對緩存區(qū)中代碼進行美化

$ vim package.json
"lint-staged":{
    "*":"prettier -w -u"
}

配置路徑別名

為Vue項目添加路徑別名

$ vim vite.config.ts
import {join} from "path"

export default defineConfig({
  resolve:{
    alias:[
      {find:"@/", replacement:join(__dirname, "src/")}
    ]
  }
})

為TypeScript添加的路徑別名添加提示功能

  1. 配置tsconfig.jsoncompilerOptions屬性的baseUrl為當前路徑
  2. 配置tsconfig.jsoncompilerOptions屬性的paths喝峦,為其添加對@/別名的支持
$ vim tsconfig.json
{
  "compilerOptions": {
    "baseUrl":".",
    "paths":{
      "@/*":["src/*"]
    }
  }
}

對單元測試Jest配置對路徑別名的支持

$ vim jest.config.js
module.exports = {
  moduleNameMapper:{
    "^@/(.*)$":"<rootDir>/src/$1"
  }
};
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市呜达,隨后出現的幾起案子谣蠢,更是在濱河造成了極大的恐慌,老刑警劉巖查近,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件眉踱,死亡現場離奇詭異,居然都是意外死亡霜威,警方通過查閱死者的電腦和手機谈喳,發(fā)現死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來戈泼,“玉大人婿禽,你說我怎么就攤上這事赏僧。” “怎么了扭倾?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵淀零,是天一觀的道長。 經常有香客問我膛壹,道長驾中,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任恢筝,我火速辦了婚禮哀卫,結果婚禮上,老公的妹妹穿的比我還像新娘撬槽。我一直安慰自己此改,他們只是感情好,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布侄柔。 她就那樣靜靜地躺著共啃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪暂题。 梳的紋絲不亂的頭發(fā)上移剪,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機與錄音薪者,去河邊找鬼纵苛。 笑死,一個胖子當著我的面吹牛言津,可吹牛的內容都是我干的攻人。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼悬槽,長吁一口氣:“原來是場噩夢啊……” “哼怀吻!你這毒婦竟也來了?” 一聲冷哼從身側響起初婆,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤蓬坡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后磅叛,有當地人在樹林里發(fā)現了一具尸體屑咳,經...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年弊琴,在試婚紗的時候發(fā)現自己被綠了乔宿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡访雪,死狀恐怖详瑞,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情臣缀,我是刑警寧澤坝橡,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站精置,受9級特大地震影響计寇,放射性物質發(fā)生泄漏。R本人自食惡果不足惜脂倦,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一番宁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赖阻,春花似錦蝶押、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至苇侵,卻和暖如春赶盔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背榆浓。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工于未, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人陡鹃。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓烘浦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親杉适。 傳聞我的和親對象是個殘疾皇子谎倔,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內容