2016-10-20 1 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는 윈도우와 글로벌의 차이점을 구분합니다. 해당 세션의 모든 파일에서 모든 것을 사용할 수 있도록하려면 네임 스페이스에 있어야합니다. 창은 명시 적 창입니다.

관련 문제