記一次使用mocha做單元測試
我寫了一個有向無環圖,但是沒法驗證我寫的程式碼時正確的。所以引入單元測試,選擇mocha是因為比較多人用。文件比較全
參考文件
使用過程
-
安裝mocha nycnpm i nyc @babel/register mocha --save-dev
-
在package.json中的scripts上新增"test": "nyc mocha --require @babel/register -R spec src/test",這樣執行npm run test 就能執行test資料夾下的所有測試檔案
-
在test資料夾下新建IsDAG.test.js檔案 (通常,測試指令碼與所要測試的原始碼指令碼同名,但是字尾名為.test.js),寫測試程式碼,因為node自帶的斷言庫不好用,所以可以使用chai斷言庫
-
寫完後執行npm run test發現報錯了 import不存在。原因是 mocha是node的構建工具,預設只支援commonJS的模組系統,引入@babel/register "test": "nyc mocha --require @babel/register -R spec src/test"。
所以在"test": "nyc mocha --require @babel/register -R spec src/test"加上@babel/register
import { expect } from 'chai'; import { isDag } from '../index'; // describe塊稱為"測試套件"(test suite),表示一組相關的測試。它是一個函式,第一個引數是測試套件的名稱("加法函式的測試"),第二個引數是一個實際執行的函式。 describe('是否是有向無環圖測試', function() { // it塊稱為"測試用例"(test case),表示一個單獨的測試,是測試的最小單位。它也是一個函式,第一個引數是測試用例的名稱("1 加 1 應該等於 2"),第二個引數是一個實際執行的函式。 it('是Dag測試', function (done) { const graph = [ { source: 1, target: 2, },{ source: 1, target: 3 } ] const result = isDag(graph); if(result) { // 正確返回done done() }else { // 錯誤返回錯誤資訊 done('錯誤'); }; }); });
在vscode上斷點除錯
- 選擇mocha檔案測試
- 編寫配置檔案,(如何把nyc命令加進來我就不知道了)
{ // 使用 IntelliSense 瞭解相關屬性。 // 懸停以檢視現有屬性的描述。 // 欲瞭解更多資訊,請訪問: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "Mocha Tests", "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha", // mocha的位置 "args": [ // 執行的命令 "--require", "@babel/register", "-R", "spec", "${workspaceFolder}/src/test" // 測試檔案都位置 ], "internalConsoleOptions": "openOnSessionStart" } ] } - 新增斷定除錯