终端运行ember test时console.log无输出调试受阻问题咨询
Ember 2.8 Docker环境测试日志输出、调试问题解决方案
终端日志丢失问题修复
- 替换默认测试运行器:放弃2.8版本默认适配的PhantomJS,改用Headless Chrome,PhantomJS在Docker环境下本身存在日志透传缺陷,且早已停止维护。
- 修改项目根目录下的
testem.js配置,覆盖默认的日志拦截规则:
module.exports = { // 保留文件内原有其他配置,新增/修改以下字段 "browser_args": { "Chrome": { "ci": [ "--headless", "--disable-gpu", "--no-sandbox", "--remote-debugging-port=9222", "--enable-logging=stderr", "--v=1" ] } }, "tap_quiet_logs": false, "report_passed_tests": true }
- 测试启动命令替换为
ember test --launch=Chrome --test-port=7357 --host=0.0.0.0,执行后console.log、QUnit原生输出都会直接透传到当前终端。如果需要自定义QUnit日志格式,可以在tests/test-helper.js中添加日志桥接逻辑,避免浏览器上下文和Node进程通信时丢日志:
QUnit.log(function(details) { const logContent = `[${details.result ? 'PASS' : 'FAIL'}] ${details.module} > ${details.name}: ${details.message || ''}`; if (window.Testem) { window.Testem.emit('test-metadata', { message: logContent }); } });
VS Code调试失效问题修复
- 启动Docker容器时新增端口映射规则,将测试服务端口、Chrome调试端口绑定到宿主机:启动命令追加参数
-p 7357:7357 -p 9222:9222。 - VS Code安装适配老版本Chrome调试协议的Debugger for Chrome扩展,在项目
.vscode/launch.json中添加如下调试配置:
{ "version": "0.2.0", "configurations": [ { "name": "Attach Docker Ember Test", "type": "chrome", "request": "attach", "port": 9222, "address": "localhost", "webRoot": "${workspaceFolder}", "pathMapping": { "/": "${workspaceFolder}/", "/assets": "${workspaceFolder}/tmp/classic-tests" }, "sourceMaps": true } ] }
- 启动测试时改用监听模式
ember test --server --launch=Chrome --test-port=7357 --host=0.0.0.0,等终端提示Chrome实例连接成功后,在VS Code调试面板选中刚才新建的配置启动,即可正常在源码、测试代码中打断点调试,所有运行时日志也会同步输出到VS Code调试控制台。
注意:容器内不要用root用户执行ember命令,否则Headless Chrome会因权限限制无法开启远程调试端口、出现日志截断问题,提前切换到普通用户并给项目目录分配对应读写权限即可。
内容的提问来源于stack exchange,提问作者David Pell
相关产品推荐
相关产品推荐

