利用 Proxy 构建自动 Mock 与行为追踪测试工具
不使用任何测试框架,仅用 Proxy 创建能记录所有调用的 Mock 对象,支持断言调用次数、参数匹配、甚至模拟异步返回。 · 难度:入门 · +10XP
利用 Proxy 构建自动 Mock 与行为追踪测试工具
单元测试中常需要 Mock 复杂对象。本教程将展示如何创建一个 createMock 函数,返回一个 Proxy,拦截所有 get 和 set,将每个属性访问和函数调用记录到内部日志。然后提供 assertCalledWith、assertCalledTimes 等方法。甚至可以模拟 async 函数:当调用一个 mock 方法时,返回一个 Promise 或指定值。
function createMock() { const log = []; const handler = { get(target, prop) { if (prop === '__log') return log; if (prop === 'assertCalledWith') return (...args) => { /* 检查 log */ }; return (...args) => { log.push({ method: prop, args }); return 'mockReturn'; }; } }; return new Proxy({}, handler); }
const mock = createMock(); mock.fetch('/data'); mock.fetch('/user', {id:1}); console.log(mock.__log.length); // 2