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

Angular8从Protractor迁移到Cypress后执行ng e2e报getProjectMetadata不存在错误

问题根因

@cypress/schematic 高版本依赖的@angular-devkit/core版本 >=9.x,而Angular 8对应的@angular-devkit系列包最高只有0.803.x版本,该版本不存在getProjectMetadata内置任务接口,所以调用ng e2e时会触发找不到任务的报错,仅切换@angular-devkit/build-angular的次版本无法解决该问题。

解决方案

方案1:降级@cypress/schematic到适配Angular8的版本

  • 卸载当前已安装的高版本schematic
npm uninstall @cypress/schematic --save-dev
  • 安装兼容Angular 8的2.x版本
npm install @cypress/schematic@2.3.0 --save-dev
  • 清理缓存并重装依赖
rm -rf node_modules package-lock.json
npm cache clean --force
npm install
  • 重新执行ng e2e验证功能是否正常

方案2:跳过Angular CLI调用,直接使用原生Cypress命令执行测试(更稳定)

该方案不需要修改现有依赖,完全避开CLI和devkit的版本兼容问题:

  1. 检查项目根目录是否存在cypress.config.js配置文件,不存在则手动新增:
const { defineConfig } = require('cypress')

module.exports = defineConfig({
  e2e: {
    baseUrl: 'http://localhost:4200', // 与你本地ng serve启动的服务地址保持一致
    supportFile: 'cypress/support/e2e.js', // 按你实际的support文件路径配置
  }
})
  1. 在package.json的scripts字段中新增Cypress执行命令:
{
  "scripts": {
    "cypress:open": "cypress open", // 打开GUI界面执行测试
    "cypress:run": "cypress run" // 无头模式执行测试
  }
}
  1. 执行测试时,先打开一个终端窗口运行ng serve启动项目,再打开另一个终端窗口执行npm run cypress:open即可调用Cypress运行测试用例,效果和ng e2e完全一致。

补充检查项

如果执行上述方案后仍报错,检查全局安装的Angular CLI版本是否为8.x版本,全局版本过高也会触发devkit兼容问题,可执行以下命令降级全局CLI:

npm install -g @angular/cli@8.3.29

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:48:01