--- 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`