2017-02-17 5 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

왜 한 파일에 여러 구성 요소가 있습니까?각각의 구성 요소를 하나의 다른 구성 요소에서만 사용하는 경우에도 각 구성 요소를 자체 파일로 추상화하는 것이 이상적입니다. 추상화 계층에는 고유 한 이점이 있습니다. 각 구성 요소를 개별적으로 내보낼 수 있고 여러 파일을 하나의 파일 문제로 처리하지 않을 수 있습니다. – finalfreq

+0

구성 요소가 매우 세밀 해져서 가독성, 성능 및 디버깅에 도움이된다고 생각합니다. 그들은 더 작은 부품들로 폴더를 오염시키고 싶지 않았습니다. – MichaelTaylor3D

+0

그럴 경우 유일한 옵션은 키/값 쌍을 가진 객체를 내보내고'const MyComponent = require ('MyComponent')해야한다는 것입니다. MyComponent' – finalfreq

답변

1

CommonJS 모듈을 수행하지 무엇을 얻을 것입니다

exportsmodule.exportsexports원에 등록 module.exports을 설정 한 후 별칭이기 때문에 가능하지
module.exports = MyComponent 
exports.PrivateComponent1 = PrivateComponent1 
exports.PrivateComponent2 = PrivateComponent2 

"transporter"(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은 사용자가 Node CommonJS 모듈과 ES2015 모듈을 동일한 방식으로 가져올 수 있도록 interop 함수 (_interopRequireDefault 참조)를 만듭니다.

+0

이것은 훌륭한 대답입니다. 그래서 짧은 대답은 내가 정확히 원하는 것을 할 수있는 마법이 없다는 것입니다. (그들은 .default를 사용하는 것에 대해 불평 할 것입니다.) 그러나 이 위대한 정보는 내가 왜 내가 원하는 것을 할 수 없는지 보여줍니다. 고마워요! – MichaelTaylor3D

관련 문제