2016-10-20 9 views
0

私はあなたがこれをするはずではないことを知っていますが、依然としていくつかのウィンドウ変数が浮動するrequirejsを使ってレガシーコードでいくつかのテストを書こうとしています。モカとjsdom - ウィンドウ変数を設定する方法

基本的に、私はモカテストを書いて、別のファイルが後で使用するいくつかの事前定義されたグローバル変数を追加しようとしています。私は次のことをやろうとしていますが、グローバル変数 "container"は後でアクセスするときには読み込まれません。

global.document = require('jsdom').jsdom('<html></html>'); 
global.window = document.defaultView; 
global.$ = require('jquery')(window); 

// this should be available everywhere as far as I can tell... 
global.container= {}; 
global.window.container= global.container; 

// legacy scripts still using requirejs, so we need to load the require config here 
var requirejs = require('testing-setup').requirejs; 

// chai is nice 
require('chai').should(); 

describe('model tests', function() { 
    var model; 

    // before we begin the tests, we need to require in all the necessary modules 
    before(function (done) { 
     window.container= { 
      dateFormat: false 
     }; 

     requirejs(['Model', 'common', 'date'], function (Model) { 
      // load some dummy data out of a file 
      model= new Model(require('./test-data.js').item); 
      done(); 
     }); 
    }); 

    // run some more tests down here, I'll spare you those 
}); 

上記の「共通」という名前のスクリプトは、ウィンドウ上に存在するグローバルな「コンテナ」オブジェクトへの参照を持ちます。明らかに私が持っているものは正しいとは言えません。 jsdomに共有グローバル変数を設定する方法はありませんか?私はそれが物事を行う標準的な方法ではないことを知っているので、講義を余分にしてください。現在のレガシーコードをすべてリファクタリングすることは実際には実現可能な選択肢ではありません。

答えて

0

ああ、これはであることがわかります。 jsdom/nodejsは、ウィンドウとグローバルの違いを区別しているようです。そのセッションのすべてのファイルでどこでも利用できるようにするには、グローバル名前空間にある必要があります。ウィンドウは明示的なウィンドウです。

関連する問題