实习JS - 测试定义前的异步挂钩?

时间:2016-08-18 14:07:17

标签: javascript testing asynchronous intern

我想在定义测试之前做一个异步操作。例如,加载jsdom环境。 这样做时,实习生会进行0次测试。 这样做的正确方法是什么? 我无法在配置本身中执行此操作,因为需要加载配置才能让实习生找到jsdom

我的实习配置加载以下文件:

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( ...
} ); 

2 个答案:

答案 0 :(得分:3)

Intern配置文件可以有setupteardown方法,就像测试套件一样。这些将在测试开始之前和完成之后运行。这是一个官方的,但尚未记录在案的特征。

答案 1 :(得分:0)

感谢@ jason0x43,我发现了config.setup。不幸的是,这是在加载套件后执行的,这意味着我仍然需要在before钩子中加载源代码。为了完整起见,这是我的解决方案。 在实习生配置中:

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( ...
} );