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

健身追踪器用户routines API返回格式不符测试预期求助

健身追踪器接口测试匹配问题解决

问题概述

测试用例的预期与实际返回不匹配,简化后的对比如下:

预期返回

[{"activities": [{"activityId": 3, ...}]}]

实际返回

{"publicRoutines": [{"activities": [{"activityId": 3, ...}]}]}

测试要求:

  • 获取特定用户的公开routines列表
  • 获取已登录用户的所有routines列表

当前接口代码:

usersRouter.get(`/:username/routines`,async(req,res) =>{
    const username = req.params.username
    try{
        if(username){
            const userRoutines = await getAllRoutinesByUser({username});
            const publicRoutines = await getPublicRoutinesByUser({username})
            console.log(publicRoutines, userRoutines)
            res.send({publicRoutines, userRoutines})
        }else{
            return null;
        }
    }catch(error){
        throw Error('Failed to get', error)
    }
})

解决方案

问题核心是接口需要区分当前登录用户是否为请求的目标用户,返回不同结构的数据以匹配两个测试场景:

  1. 当请求的是其他用户的routines时,仅返回公开routines数组(匹配第一个测试要求)
  2. 当请求的是已登录用户自己的routines时,返回包含公开列表和所有列表的对象(匹配第二个测试要求)

修改后的代码(假设通过req.session.user获取当前登录用户信息,需根据项目实际登录校验方式调整):

usersRouter.get(`/:username/routines`, async(req,res) =>{
    const targetUsername = req.params.username;
    // 获取当前登录用户(根据项目实际登录实现调整,比如从session、token解析)
    const currentUser = req.session?.user;

    try{
        // 先获取目标用户的公开routines
        const publicRoutines = await getPublicRoutinesByUser({username: targetUsername});

        // 判断当前登录用户是否是目标用户
        if(currentUser && currentUser.username === targetUsername){
            // 是自己,获取所有routines并返回包含两类数据的对象
            const userRoutines = await getAllRoutinesByUser({username: targetUsername});
            res.send({publicRoutines, userRoutines});
        }else{
            // 是其他用户,仅返回公开routines数组
            res.send(publicRoutines);
        }
    }catch(error){
        // 错误处理改为返回响应给客户端,避免express抛出未捕获异常
        res.status(500).send(`获取routines失败: ${error.message}`);
    }
})

补充说明

  • 原代码无论请求对象是谁都返回带键的对象,导致获取其他用户公开列表的测试不匹配预期的数组格式
  • 错误处理部分需调整为通过res.send返回错误响应,而非直接throw Error,否则会触发express的错误捕获机制导致测试失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:15:47