---
# System prepended metadata

title: 單元測試
tags: [Templates, Documentation]

---

---
title: '單元測試'
util: jest
---


[TOC]

## 工具規格

1. vue3 官方單元測試套件 - Vue Test Utils
2. 單元測試工具包 -Jest

## 所需安裝的套件
```
1. jest -> 單元測試工具
2. @vue/vue3-jest      -> 轉換vue檔用
3. @vue/test-utils@next -> vue官方提供的的單元測試用mount()
4. @babel/preset-env -> es6 支援到es5 轉換用(javascript)
5. jest-environment-jsdom ->  jest 28版本後不再是預設, 需安裝
6. ts-jest  -> 轉換ts/tsx用
7. babel-jest -> 轉換js用
```

## 檔案結構
```
1. 在components 新增一個__tests__ , 檔案名稱為   某name.test.ts
2. 在hook 新增一個__test__ , 檔案名稱為 某name.test.ts
```
---

> 以上請透過yarn add 安裝 , 記得加上--save-dev

> Jest 是功能最全的测试运行器。它所需的配置是最少的，默认安装了 JSDOM，内置断言且命令行的用户体验非常好。不过你需要一个能够将单文件组件导入到测试中的预处理器。我们已经创建了 vue-jest 预处理器来处理最常见的单文件组件特性。

程式端
---
```
// 需要在 package.json 中定义一个单元测试的脚本。

{
  "scripts": {
    "test": "jest"
  }
}
```
```
// 在 package.json 中创建一个 jest 块：

  "jest": {
    "preset": "ts-jest",
    "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$",
    "testEnvironment": "jsdom",
    "moduleFileExtensions": [
      "js",
      "json",
      "vue",
      "ts"
    ],
    "transform": {
      "^.+\\.js$": "babel-jest",
      "^.+\\.vue$": "@vue/vue3-jest",
      "^.+\\.(ts|tsx)$": "ts-jest"
    },
    "moduleNameMapper": {
      "^@/(.*)$": "<rootDir>/src/$1"
    }
  },
```
```
// 新增一個babel.config.json 作為轉換javascript es5 es6 相容用

{
  "presets": [
    ["@babel/preset-env", { "targets": { "node": "current" } }]
  ]
}
```

> 以上參考自: https://v1.test-utils.vuejs.org/zh/

功能教學
---
```
第一步:  const wrapper = mount(Foo)
第二步:  expect(wrapper.classes('bar')).toBe(true)
```
* 此wrapper為一個包裹器, 底下有許多方法可以使用
* 此expect 用此便于检查已存在的元素


## 測試執行序

:::info
* describe(執行說明可執行多筆test, Fn, timeout)
* test(執行說明文字, Fn, timeout)
* it(執行說明文字, Fn, timeout)
:::

###### tags: `Templates` `Documentation`
