如何使用Jasmine测试独立load函数是否已被调用
load函数调用测试及问题修复
现有函数已知问题修复
原代码存在JSON解析错误无法正确捕获的问题:catch块未声明错误接收参数,打印的err始终是文件读取环节的错误,修复后的代码如下:
function load(nameString) { // 新增调用日志,可直接验证函数是否被触发 console.log('load函数已被调用,传入参数为:', nameString); nameString = nameString.toLowerCase().split(" "); // 边界校验:避免传入的名字没有空格分隔导致下标越界 if(nameString.length < 2) { console.log('传入的姓名格式错误,需要为名 姓两个部分,空格分隔'); return; } const fs = require("fs"); fs.readFile( `visitor_${nameString[0]}_${nameString[1]}.json`, "utf8", (err, visitorInfo) => { if (err) { console.log("Error reading file from disk:", err); return; } try { const visitorData = JSON.parse(visitorInfo); console.log(visitorData); // 新增回调执行日志,可验证文件读取及解析流程正常走完 console.log('load函数文件读取及解析流程执行完成'); } catch (parseErr) { console.log("Error parsing visitor info", parseErr); } } ); }
测试函数是否被调用的方法
- 手工直接调用测试
在代码末尾直接添加调用语句,传入符合格式的参数即可,比如:
// 对应需要提前在同级目录创建 visitor_zhang_san.json 测试文件 load("Zhang San");
运行js文件后如果控制台输出第一行的load函数已被调用日志,就可以确认函数被成功触发。
- 单元测试场景验证
如果在单元测试环境下,可以给fs.readFile打桩模拟返回,也可以给函数加调用计数标记:
// 示例:添加调用统计 load.callCount = 0; const originalLoad = load; load = function(...args) { load.callCount++; return originalLoad.apply(this, args); } // 调用后判断计数即可验证是否触发 load("Li Si"); console.log(load.callCount); // 输出为1则说明函数被调用
注意事项
函数要求传入的参数必须是空格分隔的两个字符串,否则拼接的文件名会出现undefined导致读取失败。
内容的提问来源于stack exchange,提问作者Sandyaxes
相关产品推荐
相关产品推荐

