2016-08-18 6 views
0

테스트를 정의하기 전에 비동기 작업을 수행하고 싶습니다. 예를 들어, jsdom 환경을로드하십시오. 이렇게하면 인턴은 0 개의 테스트를 실행합니다. 이 작업을 수행하는 올바른 방법은 무엇입니까? 인턴이 jsdom을 찾으려면 config를로드해야하므로 config 자체에서는이 작업을 수행 할 수 없습니다. 단지 테스트 스위트처럼, 인턴 config 파일이 setupteardown 방법을 가질 수있는 실제 테스트인턴 JS - 테스트 정의 이전의 비동기 후크?

define([ 
     "intern!bdd", 
     "intern/chai!expect", 

     "src/Renderer" 
    ], function(
     bdd, 
     expect, 

     Renderer 
    ) 
{ 
"use strict"; 

bdd.describe("Renderer", function() 
{ 
    it(... 
    it(... 
}); 

답변

0

@ jason0x43 덕분에, 나는 약 config.setup을 알게되었습니다. 불행히도, 이것은 스위트가로드 된 후에 실행됩니다. 즉, 여전히 이전 훅에 소스를로드해야합니다. 완전성을 위해, 이것은 나의 해결책이다. 인턴 설정에 :

cfg.setup = function() 
{ 
    return new Promise(function(resolve, reject) 
    { 
     require([ 
       "intern/dojo/node!jsdom" 
      ], function(
       jsdom 
      ) 
     { 
      var body = ""; 
      var scripts = []; 

      jsdom.env(body, scripts, function(err, window) 
      { 
       global.document = window.document; 
       resolve(); 
      }); 
     }); 
    }); 
}; 

내 테스트 스위트 :

define([ 
     "intern!bdd", 
     "intern/chai!expect", 

    ], function(
     bdd, 
     expect, 
    ) 
{ 
"use strict"; 

bdd.describe("Renderer", function() 
{ 
    var RendererClass; 

    bdd.beforeEach(function() 
    { 
     return new Promise(function(resolve) 
     { 
      require([ "src/Renderer" ], function(Renderer) 
      { 
       RendererClass = Renderer; 
       resolve(); 
      }); 
     }); 
    }); 

    it(... var subject = new Renderer(); ... 
    it(... 
}); 
3

define([ 
     "intern/dojo/node!jsdom" 
    ], function(
     jsdom 
    ) 
{ 
    "use strict"; 

    var body = ""; 
    var scripts = []; 

    jsdom.env(body, scripts, function(err, window) 
    { 
     define([ 
      "./test_MyRenderer", 
      ], function() 
     { 
     }); 
    }); 
}); 

test_Renderer 정의

내 인턴 설정은 다음 파일을로드합니다. 테스트가 시작되기 전과 끝난 후에 실행됩니다. 이것은 공식이지만 아직 문서화되지 않은 기능입니다.

+0

아, 그건 매우 유용합니다. 나는 suite로부터의 hook처럼'setup'이 약속을 되돌려줌으로써 비동기 성을 처리 할 수 ​​있다고 가정하고있다. – SirLenz0rlot

+2

예, 할 수 있습니다. – jason0x43

+0

감사의 말로 답변으로 받아들입니다. 이상적인 솔루션은 전 세계에 적용되지 않는 항목을 포함하므로 특정 테스트에 더 가까이 다가 갈 수 있습니다. – SirLenz0rlot