1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
// 追加のnpm installは無しでできる。 'use strict'; const assert = require('assert'); /** * 第1引数がtrueならば第2引数を1回実行する関数 */ const testTargetFunc = async (flag, callback) => { if (flag) { return callback(); } }; const _1回呼ばれる場合 = async () => { // コールトラッカー const tracker = new assert.CallTracker(); // このスコープで必ず1回だけ呼ばれるべき関数 const calledOnce = tracker.calls((a) => a, 1); // テスト実行 await testTargetFunc(true, calledOnce); // コールトラッカーの結果確認 tracker.verify(); }; const _0回呼ばれる場合 = async () => { // 1回も呼んではいけない関数 const calledNever = assert.fail; // テスト実行 await testTargetFunc(false, calledNever); }; const _2回呼ばれる場合 = async () => { // コールトラッカー const tracker = new assert.CallTracker(); // このスコープで必ず2回呼ばれるべき関数 const calledTwice = tracker.calls((a) => a, 2); // テスト実行 await testTargetFunc([], calledTwice); // 呼ばれる await testTargetFunc(0, calledTwice); // 呼ばれない await testTargetFunc({}, calledTwice); // 呼ばれる // コールトラッカーの結果確認 tracker.verify(); }; const main = async () => { const tests = [ _1回呼ばれる場合, // _0回呼ばれる場合, _2回呼ばれる場合, ]; for (const test of tests) { try { await test(); console.log(`テストOK ${test.name}`); } catch (err) { console.log(`テストNG ${test.name}`, err); } } }; main(); |
1 2 3 |
テストOK _1回呼ばれる場合 テストOK _0回呼ばれる場合 テストOK _2回呼ばれる場合 |