[メモ] Jestで特定のメソッドが呼ばれていないことをアサートする


やりたいこと

テストコードをJestで書いていて、特定のメソッドがコールされてないことをチェックしたい
というかES6以下で対象メソッドが動くことを確認したい

もっと良いやり方ありそうなのでご存じの方教えて頂きたいです...

やりかた

下記のような指定の文字で終わっているか確認するメソッドがあるとします。
endsWithを使ってはいけない制約があるとします

app.js
// 指定の文字で終わっているか確認します
// ES6で導入されたendsWithは使ってはいけない

/**
 * @param {String} str
 * @param {String} target
 */
function confirmEnding(str, target) {
  const len = str.length;
  return str.substring(len - target.length, len) === target;
}

module.exports = confirmEnding;

endsWithが使われていないことをアサートしたい場合
メソッド自体を文字列化し、対象のメソッドが文字列に含まれていないことを確認します

app.test.js
const confirmEnding = require("./ConfirmtheEndingTargetStr");

test("confirmEnding()はendsWithを使用していけません", () => {
  const result = confirmEnding
    .toString()
    .replace(confirmEnding.name, ""); // メソッド名に`endsWith`が入ってるとだめなので、消しておく
  expect(result.includes("endsWith")).toBeFalsy();
});