安裝
chai 是一種斷言庫(Assertion Library),mocha 不像是jest已經內建,可以自行決定要使用哪一種套件,chai是其中最常見的一種。
在package.json加入測試指令
"scripts": {
"test": "npx mocha"
}
設定 Babel
安裝 Babel,再來的說明都會直接使用es6的語法,如果不需要,可以略過這部分。
接著在根目錄新增 babel.config.js
// babel.config.js
module.exports = {
presets: [
'@babel/preset-env',
],
};
接著在根目錄新增 .mocharc.js,spec是設定 mocha 執行測試的檔案,預設為 test/ ,這裡設定成自動讀取 src/test/ 底下所有以 spec.js 為結尾的檔案。
require可以接陣列設定所需的 module
// .mocharc.js
module.exports = {
spec: ['src/test/*.spec.js'],
require: ['@babel/register'],
};
.mocharc.js 是 mocha 執行時會自動讀取的設定檔,也支援json 或 yaml(說明),可以選擇喜歡的格式新增,設定檔的內容可以參考:https://github.com/mochajs/mocha/tree/master/example/config
設定參考資料:
https://github.com/mochajs/mocha-examples/tree/master/packages/babel
建立測試
新增一個簡單的測試
// src/test/array.spec.js
import chai from 'chai';
describe('Array', () => {
describe('#indexOf()', () => {
it('should return -1 when the value is not present', function() {
chai.assert.equal([1, 2, 3].indexOf(4), -1);
});
});
});
馬上執行試試看
應該會看到下面的資訊,
完成第一個測試囉!
支援 async/await
請安裝套件
把套件加到 babel.config.js的 plugin 設定
module.exports = {
require: ['@babel/register'],
plugins: ['@babel/plugin-transform-runtime'],
};
Root Hooks
mocha 提供的 hook 包含 before(), after(), beforeEach(), and afterEach(),從語意應該不難看出用途,前兩個只會執行一次,後兩個則是每項測試都會執行。
若要在所有的測試上加上 Hook,則是有這四種 beforeAll(), afterAll(), beforeEach(), and afterEach(),執行時機不變,請根據情境加上執行內容:
// src/test/hooks.js
export const mochaHooks = {
beforeEach: () => {
// do something before every test
}
};
接著在 .mocharc.js 加上設定
module.exports = {
spec: ['src/test/*.spec.js'],
require: [
'@babel/register',
'src/test/hooks.js',
],
};
https://mochajs.org/#hooks
https://mochajs.org/#defining-a-root-hook-plugin
測試結果
mocha 是個可愛的名稱,測試結果也可以換成很多有趣的模式:
https://mochajs.org/#reporters
支援瀏覽器介面
加上指定的路徑執行下面的指令
- index.html
- mocha.css
- mocha.js
- test.spec.js
目錄底下會多了上述這些檔案,此時只要將 test.spec.js 加入你的測試,再重新整理 index.html,就能看到測試結果已經輸出在畫面上。
可以將 chai 加入 index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Mocha</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="mocha.css" />
<script src="https://unpkg.com/chai/chai.js"></script>
</head>
<body>
<div id="mocha"></div>
<script src="mocha.js"></script>
<script>
mocha.setup('bdd');
</script>
<script src="tests.spec.js"></script>
<script>
mocha.run();
</script>
</body>
</html>
再來可以直接將前面新增的 src/test/array.spec.js 內容貼過去,index.html 已經載入 mocha 和 chai ,記得把第一行的 import 拿掉。



沒有留言:
張貼留言