0

私は Babel 6 を動作させるために一生懸命努力しています。私は日常業務 (React 開発) で 5 をうまく使用していますが、6 は期待どおりに Mocha と統合されていないようです。

これらのdevDependencies、スクリプト、およびバベル構成があります。

{
  "devDependencies": {
    "babel-cli": "^6.1.2",
    "babel-core": "^6.1.2",
    "babel-preset-es2015": "^6.1.2",
    "mocha": "^2.3.3"
  },
  "scripts": {
    "test": "mocha --compilers js:babel-core/register ./tests --recursive"
  },
  "babel": {
    "presets": [
      "es2015"
    ]
  }
}

ここに私のテストコードがあります:

import ObjectBeingTested from '../src/object-being-tested';

describe('ObjectBeingTested', () => {
  it('does stuff', () => {
    const obj = new ObjectBeingTested({ foo: 0, bar: 1 });
    // ...
  });
});

...そしてソースコードには次のものがあります:

export default class ObjectBeingTested {
  constructor({ foo, bar}) {
    this.foo = foo;
    this.bar = bar;
  }
}

ただし、実行するfoo is not definedと、コンストラクターの最初の行に入ります。興味深いことに、コードを直接トランスパイルしてノード CLI から直接呼び出すと、問題なく動作します。babel-cliファイルに対して作成されたものは次のとおりです。

"use strict";

var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();

Object.defineProperty(exports, "__esModule", {
  value: true
});

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

var ObjectBeingTested = (function () {
  function ObjectBeingTested(_ref) {
    _classCallCheck(this, ObjectBeingTested);

    var foo = _ref.foo;
    var bar = _ref.bar;

    this.foo = foo;
    this.bar = bar;
  }

  _createClass(ObjectBeingTested, [/*...other defs */]);

  return ObjectBeingTested;
})();

exports.default = ObjectBeingTested;

モカを適切に実行して、テストとそれらがインポートするものをトランスパイルするにはどうすればよいですか?

私が試したこと:

  • 代わりに、babel 構成を.babelrcファイルに移動します。違いはありません。
  • -r babel-core/registerの代わりに使用して--compilersも機能しません。

アップデート

これは面白い。console.log(ObjectBeingTested.toString())モカが何を得ているかを確認するために、インポート後に実行することにしました。これが出力するものです:

function ObjectBeingTested(_ref) {
    _classCallCheck(this, ObjectBeingTested);

    this.foo = foo;
    this.bar = bar;
  }

2 つの逆参照行が完全に欠落していることに注意してください。

更新 2 :

この問題はモカとは何の関係もありません。インポートされたモジュールが、一括でトランスパイルされたものと同じ方法でトランスパイルされないことを再現できます。

4

1 に答える 1

0

回避策を見つけました。まず、Node 5 (0.12 から) に切り替えたので、作業コードに必要な変換プラグインが少なくなりました。最初にプリセットを試しましたes2015-node5が、それでもうまくいきませんでした。代わりに、これらの特定のプラグインを自分の.babelrc:

{
  "plugins": [
    "transform-es2015-modules-commonjs",
    "transform-es2015-parameters",
    "transform-es2015-destructuring"
  ]
}

これらにより、私のコンストラクターは最終的に正しくトランスパイルされました。

于 2015-11-08T03:04:42.540 に答える