3

我已经切换到Angular4.0.0-rc.1,看起来 ES5 测试包包含 ES2015 代码。

我收到此错误:

PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
  SyntaxError: Unexpected token 'const'
    at webpack:///~/@angular/core/@angular/core/testing.es5.js:10:0 <- src/test.ts:16345

还在Angular repo 上找到了相关问题。

4

4 回答 4

6

我刚刚创建了一个基本的 Angular 项目,并且在 PhantomJS 集成方面遇到了相同(或类似)的问题。

PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
  SyntaxError: Unexpected token 'const'
  at webpack:///src/app/app.component.ts:1:0 <- src/test.ts:63184

我们的团队让它发挥作用,这就是我们在文档中投入的内容:

PhantomJS 是一个无头(又名无 GUI)浏览器,可用于自动化测试。目前,PhantomJS 有一个限制,它只支持ES5 标准

  1. npm install -g phantomjs-prebuilt
  2. npm install --save-dev karma-phantomjs-launcher
    • 在 karma.conf.js 中
      1. 添加require('karma-phantomjs-launcher')到插件部分
      2. 添加PhantomJS到浏览器
  3. npm install --save intl
    • 在 src/polyfill.ts
      1. 添加import 'intl'; (在底部取消注释)
      2. 添加import "core-js/client/shim";到常青要求部分
  4. 在 src/tsconfig.spec.json (或任何用于测试的打字稿配置)
    • 将目标设置为es5

假设一切顺利,测试应该可以工作。

有关如何触发测试运行的一些示例:

  • ng test --browsers PhantomJS --singleRun true
  • ./node_modules/karma/bin/karma start ./karma.conf.js --browsers PhantomJS --singleRun true
于 2017-03-01T19:01:59.530 回答
2

就我而言,更新 karma.config.js 以使用 PhantomJS 启动器后测试失败。

为了对问题进行排序,更新了src/tsconfig.spec.json以使用 ES5 而不是 ES6。

{
    ...
    "target": "es5",
    ...
}
于 2017-06-11T20:24:26.240 回答
0

在我的情况下,这是由于 webpack 不太喜欢的恶意导入,或者更确切地说不知道如何处理它:

import {HttpClient} from "selenium-webdriver/http";

用正确的 HttpClient (我们自己的)替换解决了这个问题。问题是 JS 文件实际上是指“const”关键字,但我认为这是 ES6 保留字而不是 ES5 保留字,因此我们的错误。如果你得到类似的东西,那么你指的是向下编译器没有发现你想要任何转换的库。

于 2017-07-11T16:21:34.760 回答
0

当您使用时,@angular/cli: 1.0.0-rc.1我认为您tsconfig.json看起来像这样:

{
  "compileOnSave": false,
  "compilerOptions": {
    ...
    "target": "es5",
    "module": "es2015",
    "lib": [
      "es2016",
      "dom"
    ]
  }
}

而且您tsconfig.e2e.json的 E2E 文件夹中还应该有一个:

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../dist/out-tsc-e2e",
    "module": "commonjs",
    "target": "es6",
    "types":[
      "jasmine",
      "node"
    ]
  }
}

只需删除该行"target": "es6",因为此文件扩展了前一个文件,您最终将在 ES5 中编译您的应用程序。

它应该在那之后工作。

于 2017-03-10T15:20:25.050 回答