2016-07-29 9 views
1

私はES2015モジュールの構文を使用するコードベースを持っています。 import foo from 'bar'。また、このようなコードを持っていますJSDomでインポートをラップする方法は?

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

私は私のテスト環境用のモックDOMを提供するために、jsdomを使用したいが、私は私のインポートコードをラップする方法を見つけ出すことはできません。 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への唯一の方法ではないことが分かります。あなたはモカのようなテストランナーを通じてコードを実行するために、このすべてを行っている場合、あなたは負荷の非同期待機を行うには、あなたのテストランナーを通知する必要がありますことをSystem.import ...

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

注意もあります。言い換えれば(Mochaの場合)、あなたはdone引数を使う必要があります:

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 
        }); 
      }); 
     }); 
    }); 
}); 
関連する問題