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

GitHub Actions搭配Firebase模拟器运行iOS CI测试 本地通过CI失败排查

问题解决方案

1. 修复Shell变量未解析问题

你当前unit_test任务中,firebase执行命令用单引号包裹了xcodebuild逻辑,单引号会阻止Shell变量解析,你定义的$XC_TEST_RUN、$DEVICE等环境变量全部不会生效,导致xcodebuild拿到的参数错误,直接执行失败。
把单引号替换为双引号即可,修改后的命令参考:

- name: Run unit/integration tests (Execute w/ Firebase emulators)
  run: firebase emulators:exec --only firestore "xcodebuild test-without-building -xctestrun \$(find . -type f -name $XC_TEST_RUN) -destination \"platform=iOS Simulator,name=$DEVICE\" -derivedDataPath $DERIVED_DATA_PATH -enableCodeCoverage YES -only-testing:$UNIT_TEST_TARGET"

2. 测试代码显式指定Firebase模拟器地址

本地运行时你可能已经默认配置了Firestore指向本地模拟器,但CI环境的测试包不会自动识别模拟器地址,需要在所有Firestore操作执行前显式配置连接地址,建议把这段代码放在测试类的setUp方法中:

let settings = Firestore.firestore().settings
settings.host = "localhost:8080"
settings.isSSLEnabled = false
Firestore.firestore().settings = settings

3. 适配CI环境性能差异

CI机器性能普遍低于本地开发设备,Firebase模拟器启动后需要几秒初始化时间才能处理请求,你可以做两个调整:

  • 给测试用例的超时时间从4秒延长到10秒以上
  • 给firebase命令添加--project demo-test参数,使用demo开头的虚拟项目ID,避免误连线上真实项目,同时加快模拟器启动速度

4. 检查firebase配置文件存在性

保证项目根目录下存在firebase.json文件,且指定了Firestore模拟器的固定端口,示例配置如下:

{
  "emulators": {
    "firestore": {
      "port": 8080
    }
  }
}

如果没有这个文件,CI环境的Firebase模拟器会使用随机端口,测试代码无法找到正确的连接地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:18:02