You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 00:51:01