SyntaxError:tests.es5.js的意外标记'const'

时间:2017-02-28 16:07:37

标签: angular4

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

我收到了这个错误:

$('input[type=button]').each(function(){

    var value = $(this).val();

    if (value === "accountNumber") {

        alert("accountNumber");

    } else if (value === "name"){

        alert("name");

    } else if (value === "location"){

        alert("location");

    } else if (value === "billingAddress"){

        alert("billingAddress");

    }

});

还在Angular repo上找到了related issue

4 个答案:

答案 0 :(得分: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 standard

  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";添加到Evergreen要求部分
  4. 在src / tsconfig.spec.json中(或者用于测试的任何typescript配置)
    • 将目标设置为es5
  5. 假设一切顺利,测试应该有效。

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

    • ng test --browsers PhantomJS --singleRun true
    • ./node_modules/karma/bin/karma start ./karma.conf.js --browsers PhantomJS --singleRun true

答案 1 :(得分:0)

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

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

你的E2E文件夹中也应该有一个tsconfig.e2e.json

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

只需删除行"target": "es6",当这些文件扩展到前一个文件时,您最终将在ES5中编译您的应用。

之后它应该可以工作。

答案 2 :(得分:0)

在我的情况下,在更新karma.config.js以使用PhantomJS启动器后测试失败。

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

{
    ...
    "target": "es5",
    ...
}

答案 3 :(得分:0)

在我的情况下,由于流氓导入,webpack不太喜欢,或者更不知道如何处理它:

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

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