首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SyntaxError:意外令牌静态

SyntaxError:意外令牌静态
EN

Stack Overflow用户
提问于 2016-01-15 22:57:20
回答 1查看 16.7K关注 0票数 9

我目前正在尝试评估不同的测试框架,这些测试框架与React一起工作,结果发现Jest就在我的列表中。但是,我试图使用这里概述的静态属性:https://github.com/jeffmo/es-class-fields-and-static-properties

因此,我学习了Jest主页上的教程,并添加了一个静态propTypes属性,我的代码如下所示:

代码语言:javascript
复制
import React from 'react';

class CheckboxWithLabel extends React.Component {

  static defaultProps = {}

  constructor(props) {
    super(props);
    this.state = {isChecked: false};

    // since auto-binding is disabled for React's class model
    // we can prebind methods here
    // http://facebook.github.io/react/blog/2015/01/27/react-v0.13.0-beta-1.html#autobinding
    this.onChange = this.onChange.bind(this);
  }

  onChange() {
    this.setState({isChecked: !this.state.isChecked});
  }

  render() {
    return (
      <label>
        <input
          type="checkbox"
          checked={this.state.isChecked}
          onChange={this.onChange}
        />
        {this.state.isChecked ? this.props.labelOn : this.props.labelOff}
      </label>
    );
  }
}

module.exports = CheckboxWithLabel;

当我运行测试(npm测试或jest)时,它会引发以下错误:

代码语言:javascript
复制
➜  jest            
Using Jest CLI v0.8.2, jasmine1
 FAIL  __tests__/CheckboxWithLabel-test.js 
● Runtime Error
SyntaxError: Desktop/jest/examples/react/CheckboxWithLabel.js: Unexpected token (5:22)

我的package.json文件如下所示:

代码语言:javascript
复制
{
  "dependencies": {
    "react": "~0.14.0",
    "react-dom": "~0.14.0"
  },
  "devDependencies": {
    "babel-jest": "*",
    "babel-preset-es2015": "*",
    "babel-preset-react": "*",
    "jest-cli": "*",
    "react-addons-test-utils": "~0.14.0"
  },
  "scripts": {
    "test": "jest"
  },
  "jest": {
    "scriptPreprocessor": "<rootDir>/node_modules/babel-jest",
    "unmockedModulePathPatterns": [
      "<rootDir>/node_modules/react",
      "<rootDir>/node_modules/react-dom",
      "<rootDir>/node_modules/react-addons-test-utils",
      "<rootDir>/node_modules/fbjs"
    ],
    "modulePathIgnorePatterns": [
      "<rootDir>/node_modules/"
    ]
  }
}

你知道我在这里错过了什么吗?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-05-10 17:02:31

发生此错误是因为标准ES2015(ES6)类只能具有方法,而不能具有属性。

对我来说,它是通过安装babel-preset-stage-0来解决的,它增加了对类属性的支持。

代码语言:javascript
复制
npm install babel-preset-stage-0 --save-dev

然后配置Webpack (或.babelrc)以使用此预设:

代码语言:javascript
复制
//...
presets: ['react', 'es2015', 'stage-0']
//...

更新: of 中间2018年,Babel env预设支持ES2015,ES2016和ES2017。因此,您可以跳过第0阶段预设,而使用env预设。

代码语言:javascript
复制
npm install babel-preset-env --save-dev

然后将.babelrc更新为

代码语言:javascript
复制
//...
presets: ['env', 'xyz']
//...

要支持最新的ES2018特性,如spread /异步函数,可以添加stage-3预置。

Reference tutorial

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34821270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档