【问题标题】:Intern JS - asynchronous hook before test definition?实习生 JS - 测试定义之前的异步钩子?
【发布时间】:2016-08-18 14:07:16
【问题描述】:

我想在定义我的测试之前执行一个异步操作。例如,加载一个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( ...
} ); 

【问题讨论】:

    标签: javascript testing asynchronous intern


    【解决方案1】:

    实习生配置文件可以有setupteardown 方法,就像一个测试套件。这些将在测试开始之前和完成之后运行。这是一个官方的,但尚未有详细记录的功能。

    【讨论】:

    • 啊,这很有用。我假设我可以通过让setup 返回一个承诺来处理我的异步性,就像套件中的钩子一样?
    • 是的,可以的。
    • 谢谢,接受这个作为答案。一个理想的解决方案会涉及一些不那么全局的东西,所以我可以让它更接近特定的测试。
    • 啊。好吧,您可以在测试套件中使用setupteardown 方法。这些是在该套件中的测试之前和之后调用的。
    • 问题是我需要能够在加载源代码并指定测试之前定义钩子。如果我这样做,实习生将不会执行测试。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-27
      • 2021-10-22
      • 2017-12-16
      • 2021-10-29
      • 1970-01-01
      • 2018-10-19
      • 1970-01-01
      相关资源
      最近更新 更多