阵营摩卡 - `transform`

问题描述:

我开始使用ES6与我的摩卡测试缺少类的属性,但它与失败: Missing class properties transform.阵营摩卡 - `transform`

测试

"test": "BABEL_ENV=test nyc mocha --watch tap 'test/**/*.spec.js'", 

组件

class SignIn extends React.Component { 
    constructor(props) { 
     super(props); 
     this.state = { 
      email: 'as', 
      pw: 'as' 
     }; 

     this.logIn = this.logIn.bind(this); 
     this.changed = this.changed.bind(this); 
    } 

    changed = (e) => { 
     let newDeets = {}; 
     newDeets[e.target.name] = e.target.value; 
     this.setState(newDeets); 
    }; 

.babelrc

{ 
    "presets": ["es2015", "react","react-hmre"], 
    "ignore": [ 
    "public/**/*.js" 
    ], 
} 

的package.json

"autoprefixer": "^6.4.0", 
"babel-core": "^6.11.4", 
"babel-eslint": "^4.1.6", 
"babel-jscs": "^2.0.5", 
"babel-loader": "^6.2.4", 
"babel-preset-es2015": "^6.9.0", 
"babel-preset-react": "^6.11.1", 
"babel-preset-react-hmre": "^1.1.1", 
"babel-preset-stage-0": "^6.5.0", 

错误

> BABEL_ENV=test nyc mocha --watch tap 'test/**/*.spec.js' 

/var/www/kindred.com/node_modules/babel-core/lib/transformation/file/index.js:590 
     throw err; 
    ^

SyntaxError: /var/www/kindred.com/src/components/Signin/index.js: Missing class properties transform. 
    17 | } 
    18 | 
> 19 | changed = (e) => { 
    | ^
    20 |  let newDeets = {}; 
    21 |  newDeets[e.target.name] = e.target.value; 
    22 |  this.setState(newDeets); 

的问题是,你不告诉摩卡使用巴贝尔。您可以npm install --save-dev babel-register和使用摩卡--require babel-register

所以你的测试命令如下所示:

"test": "BABEL_ENV=test nyc --require babel-register mocha --watch tap 'test/**/*.spec.js'", 
+0

谢谢队友:)不幸的是,这两个东西同样的错误增加了。 –

巴贝尔核已经自带了,你需要用ES6运行摩卡的注册。没有必要安装它。

您应该尝试使用--compilers选项。我用下面的命令来测试我的ES6应用:

"./node_modules/.bin/mocha --timeout 0 --compilers js:babel-core/register --reporter spec" 

虽然,错误给你:

SyntaxError: /var/www/kindred.com/src/components/Signin/index.js: Missing class properties transform.

可能是由于语法错误。尝试改变

changed = (e) => { 
    let newDeets = {}; 
    newDeets[e.target.name] = e.target.value; 
    this.setState(newDeets); 
}; 

changed(e) { 
    let newDeets = {}; 
    newDeets[e.target.name] = e.target.value; 
    this.setState(newDeets); 
} 

对于我所知道的,ES6类语法犯规允许在类范围内创建的变量,只有函数声明。

一两件事,为了ES6与import(而不是require)关键字的工作,我还需要添加“0级”,我在babelrc预设。