无导出匿名函数的JS文件如何引入至测试脚本?
如何测试未导出的匿名函数JS文件?
你遇到的这个情况确实有点棘手——手里的myScript.js只有一个匿名函数,没做任何导出,还不能修改原文件。要在测试脚本里拿到这个函数,得绕点路,下面给你一个可行的方案:
原文件(不可修改)myScript.js
/* * 函数文档 * */ function (param1, cb) { cb(param1); }
测试脚本实现方案
核心思路就是读取原文件内容,清理掉注释等无关内容,提取出匿名函数的代码,再把它转换成可调用的函数对象。具体代码如下:
const fs = require('fs'); const path = require('path'); // 读取目标脚本的内容 const scriptContent = fs.readFileSync(path.resolve(__dirname, './myScript.js'), 'utf8'); // 1. 移除多行注释 const withoutMultiComments = scriptContent.replace(/\/\*[\s\S]*?\*\//g, '').trim(); // 2. 移除单行注释(如果原文件存在的话) const cleanCode = withoutMultiComments.replace(/\/\/.*/g, '').trim(); // 3. 将提取到的匿名函数转换成可调用的函数对象 // 用new Function比直接eval更安全,作用域独立,不会污染全局 const myAnonymousFunc = new Function(`return ${cleanCode}`)(); // 现在就可以正常测试这个函数了 myAnonymousFunc('测试参数', (result) => { console.log(result); // 输出:测试参数 });
一些注意事项
- 这个方案依赖原文件结构稳定:如果原文件里除了目标匿名函数还有其他代码,需要调整正则或者处理逻辑来精准提取
- 如果原匿名函数依赖全局变量,测试时要确保这些变量在测试环境中已定义
new Function相比eval更安全,因为它的执行作用域是独立的,不会影响测试脚本的全局环境
内容的提问来源于stack exchange,提问作者Shawn Mclean
相关产品推荐
相关产品推荐

