测试剪贴板提示代码时遇TypeError: Clipboard.on is not a function错误求助
解决TypeError: Clipboard.on is not a function的测试问题
错误核心是你当前Mock的Clipboard类仅实现了constructor,但主代码中调用的on方法在Mock里不存在,导致触发类型错误。
修改Mock代码的两种方案
方案1:如果on是实例方法(主代码通过Clipboard实例调用)
修改测试文件中的Mock类,添加on实例方法:
let clipboard_args; let clipboard_event_listeners = {}; // 可选:存储监听的事件和回调,方便后续测试断言 class Clipboard { constructor(...args) { clipboard_args = args; } // 模拟Clipboard的事件监听方法 on(eventName, callback) { // 可选:保存监听信息,用于验证事件绑定是否正确 if (!clipboard_event_listeners[eventName]) { clipboard_event_listeners[eventName] = []; } clipboard_event_listeners[eventName].push(callback); } } mock_cjs("clipboard", Clipboard);
方案2:如果on是静态方法(主代码直接通过Clipboard类调用)
给Mock类添加静态on方法:
let clipboard_args; let clipboard_static_listeners = {}; class Clipboard { constructor(...args) { clipboard_args = args; } // 静态事件监听方法 static on(eventName, callback) { if (!clipboard_static_listeners[eventName]) { clipboard_static_listeners[eventName] = []; } clipboard_static_listeners[eventName].push(callback); } } mock_cjs("clipboard", Clipboard);
可选测试优化
如果需要验证事件绑定逻辑是否正确,可在测试用例中检查存储的监听信息,比如:
// 调用update_elements后执行断言 expect(clipboard_event_listeners['success']).toBeDefined(); expect(clipboard_event_listeners['success'].length).toBe(1);
内容的提问来源于stack exchange,提问作者Deekshith Shetty
相关产品推荐
相关产品推荐

