Windows10下执行mochawesome-merge报Unexpected end of JSON input错误
根本原因
- 输入通配符匹配到了输出文件:原始合并命令的输入匹配规则为
cypress/reports/*.json,而输出的merged_report.json也存放在同目录下。命令执行时系统会先创建空的输出文件,mochawesome-merge会把这个未写入内容的空文件也当成待合并的输入源读取,自然触发JSON内容不完整的报错。 - Windows命令行重定向编码不兼容:Windows CMD/PowerShell默认的标准输出重定向编码为UTF-16 LE,而JSON规范要求使用UTF-8编码,直接通过
>重定向输出JSON内容会导致文件编码不匹配,JSON解析器无法正常识别内容。
你之前输出到txt再改名的方案刚好避开了以上两个问题:txt后缀的文件不会被*.json通配符匹配为输入源,合并过程读取的都是正常生成的报告文件,后续改名仅修改后缀名不影响已写入的内容。
更优雅的解决方案
方案1:使用mochawesome-merge内置输出参数(最优)
mochawesome-merge本身支持-o/--output参数直接指定输出文件路径,不需要依赖系统重定向,也会自动排除输出文件,不会将其当成输入源读取。直接修改merge脚本即可:
"merge":"mochawesome-merge cypress/reports/*.json -o cypress/reports/merged_report.json"
修改后原有final_report脚本即可正常运行,不需要额外的txt中转和改名操作。
方案2:调整输入目录规避通配符匹配
将mochawesome生成的原始报告放到单独的子目录,比如cypress/reports/raw/,输入匹配规则改为cypress/reports/raw/*.json,输出文件仍放在cypress/reports/目录下,即可避免输入源匹配到输出文件的问题。
方案3:强制CMD使用UTF-8编码(针对必须用重定向的场景)
如果有特殊需求必须使用重定向输出,可以在脚本开头添加编码切换命令,强制CMD使用UTF-8编码输出:
"merge":"chcp 65001 >nul && mochawesome-merge cypress/reports/raw/*.json > cypress/reports/merged_report.json"
其中chcp 65001用于切换到UTF-8编码,>nul用于屏蔽编码切换的命令输出,避免污染重定向的内容。
内容的提问来源于stack exchange,提问作者MsA
相关产品推荐
相关产品推荐

