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

Jasmine测试无法匹配函数返回对象属性的问题咨询

控制台输出差异原因
  • 拼接字符串显示[object Object]:JavaScript中对象与字符串拼接时,会自动调用默认的toString()方法,该方法返回固定值"[object Object]",所以执行console.log("Order: " + order)这类代码时会出现这个结果。
  • 直接打印order显示完整结构:控制台直接打印对象时,会调用内置的对象格式化工具,能解析并展示对象的所有键值对,因此可以看到真实的属性名和值。
  • 打印order.id显示1:无论属性名是驼峰还是全小写,只要属性存在,通过.直接访问就能获取对应的值,所以这里能正常拿到id。
让测试通过的解决方案

方案1:修改SQL查询,返回驼峰别名

在PostgreSQL的RETURNING语句中给字段指定驼峰别名,注意用双引号包裹别名(PostgreSQL默认会将标识符转为小写)。示例:

INSERT INTO orders (userid, currentstatus) VALUES ($1, $2) 
RETURNING id, userid AS "userId", currentstatus AS "currentStatus"

这样数据库返回的result.rows[0]属性就是驼峰式,与测试预期一致。

方案2:在JS层手动转换属性名

如果不想修改SQL,可在异步函数中把数据库返回的对象转换成驼峰命名后返回。示例:

async function createOrder(params) {
  const result = await db.query(
    'INSERT INTO orders (userid, currentstatus) VALUES ($1, $2) RETURNING id, userid, currentstatus',
    [params.userId, params.currentStatus]
  );
  const dbOrder = result.rows[0];
  // 手动转换属性名
  return {
    id: dbOrder.id,
    userId: dbOrder.userid,
    currentStatus: dbOrder.currentstatus
  };
}

这种方式简单直接,适合字段固定的场景。

方案3:使用ORM框架自动映射

如果项目允许,引入Sequelize、Prisma等ORM框架,它们默认会将数据库的小写/蛇形字段自动转换为驼峰式JS对象属性,无需手动处理SQL或转换逻辑,能彻底避免这类字段名不匹配的问题。

内容的提问来源于stack exchange,提问作者Abunagy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:57:12