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

无Angular CLI配置Angular E2E测试遇语法错误求助

解决E2E测试中TS转译失败的问题

你的错误SyntaxError: Unexpected token import核心原因是:Node.js直接尝试执行未转译的TypeScript代码(import是TS/ES6语法,Node默认不识别),说明你的TS文件没有被ts-node正确转译。下面是一步步的修复方案:

1. 修正Protractor配置文件的结构错误

你的protractor.conf.js里directConnect被错误地放在了capabilities对象内部,这会导致Protractor无法正确解析配置,进而影响ts-node的初始化。把它移到capabilities外面:

const {SpecReporter} = require('jasmine-spec-reporter');

exports.config = {
  allScriptsTimeout: 11000,
  specs: [
    './e2e/**/*.e2e-spec.ts'
  ],
  capabilities: {
    'browserName': 'chrome'
  },
  // 把directConnect移到这里
  directConnect: true,
  baseUrl: 'http://localhost:4200/',
  framework: 'jasmine',
  jasmineNodeOpts: {
    showColors: true,
    defaultTimeoutInterval: 30000,
    print: function () { }
  },
  onPrepare() {
    require('ts-node').register({ 
      project: 'e2e/tsconfig.e2e.json' 
    });
    jasmine.getEnv().addReporter(new SpecReporter({spec: {displayStacktrace: true}}));
  }
}

2. 修复tsconfig.e2e.json的编译配置

你的根目录tsconfig.json设置了"noEmit": true,这个配置会被tsconfig.e2e.json继承,导致ts-node无法生成转译后的JS文件。需要在tsconfig.e2e.json里显式覆盖这个配置:

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/e2e",
    "module": "commonjs",
    "target": "es5",
    "types": [
      "jasmine",
      "jasminewd2",
      "node"
    ],
    // 显式关闭noEmit,允许ts-node编译TS
    "noEmit": false
  }
}

3. 验证ts-node的注册逻辑

确保在onPrepare中ts-node的project路径正确(相对于Protractor配置文件的位置,也就是根目录,所以'e2e/tsconfig.e2e.json'是正确的)。如果还是有问题,可以尝试添加compilerOptions强制指定模块格式:

require('ts-node').register({ 
  project: 'e2e/tsconfig.e2e.json',
  compilerOptions: {
    module: 'commonjs'
  }
});

4. (可选)确保服务器完全启动后再运行测试

虽然这不是当前错误的直接原因,但如果服务器还没完全启动就跑E2E测试,后续可能会遇到连接失败的问题。可以安装wait-on工具:

npm install wait-on --save-dev

然后修改启动命令,先等待服务器就绪:

npm-run-all -p server:prod:ci wait-for-server --race protractor

在package.json里添加wait-for-server脚本:

"scripts": {
  // ...其他脚本
  "wait-for-server": "wait-on http://localhost:4200/"
}

完成以上步骤后,重新运行你的E2E测试命令,应该就能正常转译TS文件并执行测试了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:11:15