// 追加の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();