2016-08-18 40 views
0

我想在定義我的測試之前執行異步操作。例如,加載jsdom環境。 當這樣做時,實習生運行0次測試。 什麼是正確的方法來做到這一點? 我不能在配置本身做到這一點,因爲配置需要加載,以便實習生找到jsdom實習生JS - 測試定義之前的異步掛鉤?

我的實習生配置加載以下文件:

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,定義了實際測試

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

實習生配置文件可以有setupteardown方法,就像一個測試套件。這些將在測試開始之前和結束之後運行。這是一位官員,但尚未記錄在案。

+0

啊,這是非常有用的。我假設我可以通過讓'setup'返回一個承諾來處理我的異步性,就像套件中的鉤子一樣? – SirLenz0rlot

+2

是的,那會做到。 – jason0x43

+0

謝謝,接受這個答案。一個理想的解決方案將涉及更少的全球性,所以我可以更接近於特定的測試。 – SirLenz0rlot