将附加html添加到QUnit输出结果以进行特定测试

时间:2016-09-01 21:40:38

标签: javascript qunit

我正在测试一组算法。每个都有相同的目的,但有不同的结果,可以在图表中以图形方式查看。

我对每种算法都进行了单元测试。我想在相应的QUnit测试输出结果中有一个链接,打开正在测试的算法的图形。

问题是我找不到这样做的非黑客方式。到目前为止我最好的想法:

首先,写下测试:

module("Test algo 1");

test("test with inputs 1", ...);
test("test with inputs 2", ...);

然后编写单独的代码,记录应该添加到代码中的链接:

addAlgoLink("Test algo 1", "test with inputs 1", function()
{
    // on click code for the link that displays the
    // input/output data on a graph
})

然后addAlgoLink()的实施将:

  1. 完成所有测试后,向QUnit添加回调。
  2. 完成测试后,查看具有匹配模块名称和测试名称的条目的QUnit结果的DOM,然后附加一个带有addAlgoLink()回调的链接。对于每个测试使用QUnit的哈希ID会更容易,因为它在DOM中使用,但我找不到从测试定义中访问测试ID的方法
  3. 问题:

    1. 无法在具有相同名称的模块中处理多个测试(尽管我不知道QUnit是否支持此功能)
    2. 需要复杂的代码来处理不同深度的测试(嵌套模块)
    3. 这看起来真的太烂了。
    4. 也许QUnit可以以更优雅的方式扩展?例如。在测试代​​码中,可以调用一个方法来指定单击回调,该回调作为链接插入,以便不需要再次指定测试和模块名称。然后扩展QUnit结果输出器以显示链接。也许它可以存储在QUnit的Test对象中,虽然我认为这样做的大多数或所有方法都是私有的,这使得这看起来不可能(并不是一个好主意)。

      首先,我想做的只是一个非常糟糕的主意吗?或者只是解决方案必须是凌乱的?

1 个答案:

答案 0 :(得分:0)

诀窍是在测试中使用QUnit.config.current.testId来记录其ID。

首先写一个这样的测试:

QUnit.test("Test 1", function( assert )
{
    addTestAppendage("Test 1", QUnit.config.current.testId);
    assert.ok(true);
});

然后使用此代码在结果中查找添加的测试,并在测试结果行中附加一个按钮,该行在单击时运行闭包。

var appendages = [];
var addTestAppendage = function(testName, testId){
    appendages [testId] = testName;
};

QUnit.testDone(function(details){
    if (typeof appendages[details.testId] !=== 'undefined')
    {
        var testRowSelector = "#qunit-test-output-" + details.testId;
        var testRow = $(testRowSelector);
        testRow.append("<button class=\"view\">View Graph</button>");
        var viewButtonSelector = testRowSelector + " button.view";
        $(viewButtonSelector).on('click', function(){
            // do stuff given the test name
            console.log(details.name);
        });
    }
});
相关问题