【问题标题】:Mocha will not recognise JSXMocha 无法识别 JSX
【发布时间】:2016-05-20 04:34:33
【问题描述】:

我正在尝试使用 mocha 和酶来更新我的单元测试。我正在测试的代码在 ES6 中,使用 JSX 和 React。

我无法让 mocha 在我的测试脚本中的 JSX 上不出错。

测试脚本:

import React from 'react';
import assert from 'assert';
import { shallow } from 'enzyme';
import SamplePageMain from '../SamplePageMain';

describe('<SamplePageMain />', () => {

    var samplePage = shallow(<SamplePageMain />);

    it('should render', function () {
        assert.notEqual(samplePage, null);
    });

});

gulpfile.js:

require('babel-core/register');

...

gulp.task('test', function() {
    return gulp.src('scripts/**/test/*.js', {read: false})
        .pipe(mocha());
});

输出是:

gulp test

[16:19:06] Using gulpfile ~/dev/bikini/gulpfile.js
[16:19:06] Starting 'test'...
[16:19:06] 'test' errored after 62 ms
[16:19:06] SyntaxError in plugin 'gulp-mocha'
Message:
        /Users/me/dev/bikini/scripts/components/test/samplePageMain.js:     Unexpected token (9:26)
Details:
    pos: 206
    loc: [object Object]
    _babel: true
    codeFrame:    7 | 
   8 | 
>  9 |  var samplePage = shallow(<SamplePageMain />);
     |                           ^
  10 | 
  11 |  it('should render', function () {
  12 |      assert.notEqual(samplePage, null);
Stack:
SyntaxError:     /Users/me/dev/bikini/scripts/components/test/samplePageMain.js:     Unexpected token (9:26)
   7 | 
   8 | 
>  9 |  var samplePage = shallow(<SamplePageMain />);
     |                           ^
  10 | 
  11 |  it('should render', function () {
  12 |      assert.notEqual(samplePage, null);
    at Parser.pp.raise (/Users/me/dev/bikini/node_modules/babel-    register/node_modules/babel-core/node_modules/babylon/index.js:1425:13)
    at Parser.pp.unexpected (/Users/me/dev/bikini/node_modules/babel-    register/node_modules/babel-core/node_modules/babylon/index.js:2907:8)
    at Parser.pp.parseExprAtom     (/Users/me/dev/bikini/node_modules/babel-register/node_modules/babel-    core/node_modules/babylon/index.js:754:12)
    at Parser.pp.parseExprSubscripts     (/Users/me/dev/bikini/node_modules/babel-register/node_modules/babel-    core/node_modules/babylon/index.js:509:19)
    at Parser.pp.parseMaybeUnary     (/Users/me/dev/bikini/node_modules/babel-register/node_modules/babel-    core/node_modules/babylon/index.js:489:19)
    at Parser.pp.parseExprOps     (/Users/me/dev/bikini/node_modules/babel-register/node_modules/babel-    core/node_modules/babylon/index.js:420:19)
    at Parser.pp.parseMaybeConditional     (/Users/me/dev/bikini/node_modules/babel-register/node_modules/babel-    core/node_modules/babylon/index.js:402:19)
    at Parser.pp.parseMaybeAssign     (/Users/me/dev/bikini/node_modules/babel-register/node_modules/babel-    core/node_modules/babylon/index.js:365:19)
    at Parser.pp.parseExprListItem     (/Users/me/dev/bikini/node_modules/babel-register/node_modules/babel-    core/node_modules/babylon/index.js:1232:16)
    at Parser.pp.parseCallExpressionArguments     (/Users/me/dev/bikini/node_modules/babel-register/node_modules/babel-    core/node_modules/babylon/index.js:585:20)

我已经通过browserify运行源代码并把它放在一个测试目录中,以证明它不是mocha/enzyme本身,从而成功运行了测试。我的问题只是试图让 gulp 魔法正确。

【问题讨论】:

  • 是的。这些建议不走运
  • 我使用npm test.."test": "find ./src -name '*.test.js' | xargs mocha --require babel-core/register"在命令行上运行我的摩卡测试
  • 你下载了 react babel 预设并有一个.babelrc 文件吗?
  • @azium - 我下载了 babel-preset-es2015 和 babel-preset-react 并将它们添加到 .babelrc 文件中,它可以工作 - 谢谢。你想把它写下来作为答案吗?

标签: reactjs gulp mocha.js ecmascript-6 enzyme


【解决方案1】:

这对于 Babel 6 的用户来说是一个非常常见的问题,它本身 (babel-core) 并没有做任何事情。它要求在转译期间向其提供转换/插件。

Babel 提供了一系列常用插件作为预设。 React 项目常见的有babel-preset-2015babel-preset-reactbabel-preset-stage-0。在 npm 安装它们之后,添加一个看起来像这样的 .babelrc 配置文件:

{
  "presets": ["react", "es2015", "stage-0"]
}

对于带有 gulp 的摩卡咖啡,请查看此堆栈 gulp-mocha how to pass the compilers flag?

在此处阅读有关设置 Babel 6 的一般信息 https://babeljs.io/blog/2015/10/31/setting-up-babel-6

【讨论】:

  • 我们应该为 ES6 添加 stage-0 吗?我以为它只适用于 ES7
  • 我的回答是从 2016 年 2 月开始的。我想我应该更新它,但是为了快速响应,stage-0 现在实际上是 ES8+ 的东西
猜你喜欢
  • 1970-01-01
  • 2016-02-02
  • 1970-01-01
  • 2018-03-18
  • 2020-10-13
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多