profileActivation函数测试未全部通过,请求排查问题并修复
问题排查与修复:
profileActivation函数未通过全部测试 问题描述
实现profileActivation函数时仅通过第3、4项测试,其余测试未通过。函数需求与边界规则如下:
- 接收两个参数:
profile(对象)、reason(字符串,仅停用配置文件时必填) - 核心逻辑:
- 若
profile已激活:将其停用,添加reason属性存储停用原因,返回更新后的对象 - 若
profile未激活:将其激活,删除reason属性,返回更新后的对象
- 若
- 边界情况:
- 未激活且无
reason属性 → 返回"confirm status manually" - 已激活但有
reason属性 → 返回"confirm status manually" - 缺少
active属性 → 返回"impossible to ascertain status"
- 未激活且无
原代码问题分析
- 未处理
active属性缺失的边界情况:直接判断profile.active,忽略了该属性不存在的场景,违反需求规则 - 核心逻辑完全倒置:已激活状态下未执行停用操作,反而错误处理激活逻辑;未激活状态的操作也与需求不符
- 错误处理
reason参数:开头通过reason的值直接修改active,完全违背reason仅用于停用的规则 - 边界判断逻辑错误:已激活状态下的
reason判断逻辑与需求反向,删除reason的操作无意义
修复方案
修复后的代码
function profileActivation(profile, reason) { // 优先检查active属性是否存在 if (profile.active === undefined) { return "impossible to ascertain status"; } // 处理已激活状态:执行停用操作 if (profile.active) { // 边界情况:已激活但存在reason属性 if (profile.reason !== undefined) { return "confirm status manually"; } profile.active = false; profile.reason = reason; return profile; } else { // 处理未激活状态:执行激活操作 // 边界情况:未激活且缺少reason属性 if (profile.reason === undefined) { return "confirm status manually"; } profile.active = true; delete profile.reason; return profile; } }
修复说明
- 新增
active属性检查:优先判断profile.active是否为undefined,匹配需求中“无法确定状态”的边界规则 - 修正核心逻辑方向:
- 已激活状态:将
active设为false,添加reason属性,完成停用操作 - 未激活状态:将
active设为true,删除reason属性,完成激活操作
- 已激活状态:将
- 移除错误的
reason判断逻辑:不再根据reason的值直接修改状态,而是按照profile当前状态执行对应操作 - 严格匹配边界情况:
- 已激活时检查
reason是否存在,存在则返回指定字符串 - 未激活时检查
reason是否不存在,不存在则返回指定字符串
- 已激活时检查
- 确保返回值符合要求:所有正常操作后返回更新后的
profile对象,完全匹配需求规则
内容的提问来源于stack exchange,提问作者William Johnson
相关产品推荐
相关产品推荐

