Vitest Config 設定方式
透過 vitest.config.js 檔案調整測試設定
執行 npm 指令時帶參數指定設定檔案路徑
直接在原先 vite.config.js 中調整
Vitest config option Vitest config調整什麼?
include
Type:string[]
預設值:['**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}']
藉由這個欄位我們可以提供 glob 格式讓 vitest 去比對哪些是測試檔案,也可以放入多個條件在陣列中。
1 2 3 4 5 6 import { defineConfig } from 'vitest/config' export default defineConfig({ test: { include: ['**/*.spec.js'], }, })
這個設定主要會影響到後續我們要如何擺放測試程式碼,因此做規劃時可以按需求考量調整。
exclude
Type: string[]
預設值: ['**/node_modules/**', '**/dist/**', '**/cypress/**', '**/.{idea,git,cache,output,temp}/**']
藉由這個欄位我們可以提供 glob 格式讓 vitest 去排除哪些不是測試檔案,也可以放入多個條件在陣列中。
1 2 3 4 5 6 7 import { defineConfig } from 'vitest/config' export default defineConfig({ test: { exclude: ['**/node_modules/**', '**/dist/**', '**/cypress/**', '**/.{idea,git,cache,output,temp}/**'], }, })
與 include 相反,這次則是要排除哪些路徑不需要尋找是否有測試檔案,其中如果有用到 cypress 做 E2E 測試的話,預設規則中就已經有另外排除了,所以沒必要的話不必特別設置,但可以先記得有這個方便的欄位。
<li><b>Globals</b>
<div>
<ul>
<li>Type:boolean</li>
<li>預設值: false</li>
</ul>
由於在撰寫測試時,Vitest 預設是需要自己按需要引入對應的方法等等,如果要類似像 Jest 以全域的方式注入到測試中,就可以透過在執行時加上 --globals 選項,或是在 vitest config 選項中加入 globals: true 。
<div>
1 2 3 4 5 6 import { defineConfig } from 'vitest/config' export default defineConfig({ test: { globals: true, }, })
<div>
原先設定前,測試程式碼需要如下方引入:
1 2 3 4 5 6 7 import { describe, it, expect } from 'vitest' describe('HelloWorld', () => { it('1 + 1 should be 2', () => { expect(1 + 1).toBe('2') }) })
</div>
<div>
加入 Globals: true 後,就不需要顯示引入 vitest 測試相關的 API,讓測試看起來更乾淨:
1 2 3 4 5 describe('HelloWorld', () => { it('1 + 1 should be 2', () => { expect(1 + 1).toBe('2') }) })
</div>
</div>
</div>
</li>
<li><b>environment</b>
<div>
<ul>
<li>Type:'node' | 'jsdom' | 'happy-dom' | 'edge-runtime' | string</li>
<li>預設值: 'node'</li>
</ul>
<div>
由於 Vitest 本身默認環境 Node.js,因此若要在測試中仿造瀏覽器的應用程式,可以透過類似 jsdom 等工具來取代,而已經介紹過的npm 指令的寫法之外 -environment jsdom ,還可以在測試檔案上以 docblock 或 comment 風格的方式註記。
</div>
<div>
Docblock 風格:
1 2 3 4 5 6 7 /*** @vitest-environment jsdom*/ it('use jsdom in this test file', () => { const element = document.createElement('div') element.innerHTML = '<p>Hello, HTML!</p>' expect(element.innerHTML).toBe('<p>Hello, HTML!</p>') })
</div>
<div>
Comment 風格:
1 2 3 4 5 6 // @vitest-environment jsdom it('use jsdom in this test file', () => { const element = document.createElement('div') element.innerHTML = '<p>Hello, HTML!</p>' expect(element.innerHTML).toBe('<p>Hello, HTML!</p>') })
</div>
<div>
寫在 vitest config 中:
1 2 3 4 5 6 7 import { defineConfig } from 'vitest/config' export default defineConfig({ test: { environment: 'jsdom', }, })
</div>
</div>
</li>
### 透過 vitest.config.js 檔案調整測試設定完整語法
專案src/test/config/新增vitest.config.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 import { defineConfig } from 'vitest/config' import vue from '@vitejs/plugin-vue' export default defineConfig({ plugins: [ vue(), ], test: { // 在這裡加入測試設定 include: ['**/*.spec.js'], // 全域 globals: true,//就不需要顯示引入 vitest 測試相關的 API,讓測試看起來更乾淨 environment: 'jsdom', }, })
### 執行 npm 指令時帶參數指定設定檔案路徑
package.json script加上(修改)設定./src/test/config/vitest.config.js是剛剛新增的vitest.config.js
1 2 3 "scripts": { "test:unit": "vitest --config ./src/test/config/vitest.config.js", },
執行 test
github