2017-02-17 3 views
0

私は最近、反応プロジェクトでまだES6を使用していない仕事を取った。私はES6の背景を持っていて、ES6を使わずにテストする方法を理解できない大きなファイルを書きました。どうやって私的な反応コンポーネントをテストするのですか

基本的には、主に7つ程度のプライベートコンポーネントがあり、そのコンポーネントは読みやすさ、テスト、パフォーマンスのために別々のコンポーネントとして構築されています。ここで

を(プライベートコンポーネントにすべきコンポーネントのアップデートが大きな後押しで持つことができることは)私の問題です:

私のプライベートコンポーネントをエクスポートせずに、私はテストにそれらを書くための方法を見つける傾けます。

我々はES6を使用していないので、私は

export default MyComponent 
export PrivateComponent1 
export PrivateComponent2 

構文を使用しカント、単一のファイルから複数のコンポーネントをエクスポートする私の知っている唯一の方法は、しかし、これを

exports.MyComponent = MyComponent 
exports.PrivateComponent1 = PrivateComponent1 
exports.PrivateComponent2 = PrivateComponent2 

を使用することですいいえ私は使用する必要がある声明の中で

const MyComponent = require('MyComponent').MyComponent 

理想的に私は何かを使用したいと思いますike:

module.exports = MyComponent 
exports.PrivateComponent1 = PrivateComponent1 
exports.PrivateComponent2 = PrivateComponent2 

しかし、それは有効ではないようです。

さらに、これを別々のファイルに分割しないことをお勧めします。これは私がTDDをやっていないために得るものです:(

+0

1つのファイルに複数のコンポーネントがあるのはなぜですか?理想的には、たとえ他のコンポーネントが1つだけ使用されていても、各コンポーネントをそのファイルに抽象化します。抽象レイヤーには独自のメリットがあります。各コンポーネントを個別にエクスポートして複数のエクスポートファイルを扱うことはできません。 – finalfreq

+0

コンポーネントは非常にきめ細かくなり、読みやすさ、パフォーマンス、デバッグに役立ちます。彼らは、小さなコンポーネントの束とフォルダを汚染したくない。 – MichaelTaylor3D

+0

その場合、キー/値のペアを持つオブジェクトをエクスポートし、 'const MyComponent = require( 'MyComponent')を実行する必要があるというあなたの唯一の選択肢は、MyComponent' – finalfreq

答えて

1

CommonJSモジュール

module.exports = MyComponent 
exports.PrivateComponent1 = PrivateComponent1 
exports.PrivateComponent2 = PrivateComponent2 

exportsmodule.exportsへのエイリアスであるとexportsウォンでmodule.exportsプロパティを設定した後のでことはできませんそれ

...

「デフォルト」のプロパティを作成するには、どのトランスヒーラー(Babel)を使用しますか。

ES2015

ので、ES2015に次のコード:

'use strict'; 

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

var _anotherModule = require('./anotherModule'); 

var _anotherModule2 = _interopRequireDefault(_anotherModule); 

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 

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

var Foo = function Foo() { 
    _classCallCheck(this, Foo); 
}; 

exports.default = Foo; 

var Bar = exports.Bar = function Bar() { 
    _classCallCheck(this, Bar); 
}; 

お知らせラインexports.default = Foo;var Bar = exports.Bar = ...

import AnotherModule from './anotherModule'; 

export default class Foo {} 

export class Bar {} 

はにtranspiledされます。

ES2015を使用せずに別のファイルにモジュールをインポートするには、var Foo = require('./myPreviousModule').defaultを使用します。

Babelは、ノードCommonJSモジュールとES2015モジュールを同じ方法でインポートできるように、interop関数(関数_interopRequireDefaultを参照)を作成します。

+0

これはすばらしい答えですので、私はちょうど私が望むことをすることができないという魔法はありません。(彼らは.defaultを使うことについて不平を言います)しかし、この素晴らしい情報が私になぜ私が何をしたいのかを示すことができます。ありがとう! – MichaelTaylor3D

関連する問題