延續「mocha + webpack 的 Vue3 元件單元測試」,既然使用 mocha 測試太卡關,這次安裝 Vitest 來試試看!
一、安裝
先安裝 Vitest,另外 Vitest 需要使用 Node >=v14,並安裝 Vite >=v3.0.0,還有 vue3 對應的測試套件
npm install --save-dev vite vitest @vue/test-utils @vitejs/plugin-vue
下面這幾個根據需求來選擇是否安裝
npm install --save-dev jsdom
提供UI介面,可參考 Test UI
npm install --save-dev @vitest/ui
二、設定
先到package.json設定npm指令
"scripts": { "test": "npx vitest", }
在根目錄新增檔案 vitest.config.js
import { defineConfig } from 'vite' import Vue from '@vitejs/plugin-vue' export default defineConfig({ plugins: [ Vue(), ], test: { globals: true, environment: 'jsdom', }, });
常用的設定像是include指定測試檔案的目錄或名稱等,和exclude排除檔案
export default defineConfig({ test: { include: ['**/*.test.js'], exclude: ['**/node_modules/**'], }, });
設定路徑的alias
export default defineConfig({ resolve: { alias: { '@': path.resolve(__dirname, 'src/'), }, }, });
或者可以設定 css和setupFiles來套用css style
export default defineConfig({ test: { css: true, setupFiles: './src/vitest/setup.js', }, });
由 src/vitest/setup.js import css
// src/vitest/setup.js import 'todomvc-app-css/index.css'; import 'todomvc-common/base.css';
其他設定可以參考官方文件
完成基本設定後,就可以開始寫測試囉!
三、測試
針對現有的元件 TodoListEditor 撰寫測試
import { mount } from '@vue/test-utils'; import { test, expect } from 'vitest'; import TodoListEditor from 'components/TodoListEditor.vue'; test('TodoListEditor', () => { expect(TodoListEditor).toBeTruthy() const wrapper = mount(TodoListEditor, { props: { todoList, }, }); expect(wrapper.vm.todoList).toStrictEqual(todoList); expect(wrapper.props('todoList')).toStrictEqual(todoList); });
參考資料
四、執行
npm run test
執行後就可以看到所有的測試項目及結果,若有錯誤也會對應的訊息顯示
有安裝@vitest/ui,可以開啟ui試試看
npm run test -- --ui
五、CI/CD
有了測試之後,我們利用 github action 設定每次 push 分支時,執行 vitest 的測試,請新增檔案 .github/workflows/test.yml
name: Test on: push: branches: main jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Before srcipt run: npm install - name: Test run: npm run test -- --run
.github/workflows/gh-pages.yml內的設定:
on: workflow_run: workflows: ["Test"] types: - completed jobs: build: if: ${{ github.event.workflow_run.conclusion == 'success' }} runs-on: ubuntu-latest steps: ....
我們的目標是當 Test 成功時,才會執行部屬,否則忽略。請注意 completed 指的是完成時,無論測試結果成功與否都會觸發。因此 if: ${{ github.event.workflow_run.conclusion == 'success' }} 的設定是必要的。
也可變化成 ${{ github.event.workflow_run.conclusion == 'failure' }},當測試結果失敗時可以發送通知,根據應用情境改寫。
workflows可以設定多項,只要有任何一項執行就會觸發。
安裝 Vitest 來進行 Vue3 測試十分容易。語法跟 jest 很相像,甚至原本的 mocha 寫的測試也一行都沒改,都能夠支援測試。以上的內容有上傳到 github 上(專案),可以點選下方連結了解執行的內容。
沒有留言:
張貼留言