やりたいこと
テストコードを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();
});