2016-07-29 2 views
1

저는 ES2015 모듈 구문을 사용하는 코드베이스를 가지고 있습니다. import foo from 'bar'. 또한이 같은 코드를 가지고 : 내 테스트 환경에 대한 모의 DOM을 제공하기 위해 jsdom을 사용하고자하는JSDom으로 가져 오기를 어떻게 감쌀 수 있습니까?

// setup.js 
var foo = window.foo || ''; 

을,하지만 난 내 수입 코드를 래핑하는 방법을 알아낼 수 없습니다. import 문은 코드 앞에 와야한다, 그래서 나는이 작업을 수행 할 수 없습니다

import jsdom; 

jsdom({ 
    html: '<div></div>', 
    done:() => { 
     import setup from 'setup'; 
    } 
}) 

을하지만 그것은 속한 상단에서 가져 오기를 떠날 경우 jsdom가 참여하기 전에, window은 참조 :

import foo from 'bar'; // this uses the DOM 
import jsdom; 

jsdom({ 
    html: '<div></div>', 
    done:() =>() => { console.log('foo'); } 
}) 

AMD 또는 CommonJS로 변경하지 않고도이 문제를 해결할 수있는 방법이 있습니까?

답변

0

그래서 사양을 읽어야 할 필요가 있습니다 ... 또는 내 경우에는 사양을 무너 뜨린 멋진 블로그 (감사합니다 ②ality!) 기능 내에서 import foo from 'bar'을 사용할 수 없다는 것은 사실이지만 그것은 그것이 ES6에서 import에 대한 유일한 방법은 아닙니다. 당신은 모카와 같은 테스트 러너를 통해 코드를 실행하기 위해이 모든 일을하는 경우, 당신은 부하에 대한 비동기 대기를해야 할 테스트 러너를 통보해야한다는 점

jsdom.env({ 
    html: '<div></div>', 
    done:() => { 
     System.import('setup') 
      .then(setup) => { 
       // code that uses setup, now JSDom-wrapped 
    } 
}); 

주 ... 또한 System.import있다. 다른 말로하면 (Mocha의 경우) 다음과 같이 인수를 사용해야합니다.

jsdom.env({ 
    html: '<div></div>', 
    done:() => { 
     describe('foo',() => { 
      it('does something', (done) => { 
       System.import('setup') 
        .then(setup) => { 
         // code that uses setup, now JSDom-wrapped 
         done(); // tell Mocha we're finished 
        }); 
      }); 
     }); 
    }); 
});