我正在测试一组算法。每个都有相同的目的,但有不同的结果,可以在图表中以图形方式查看。
我对每种算法都进行了单元测试。我想在相应的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()
的实施将:
addAlgoLink()
回调的链接。对于每个测试使用QUnit的哈希ID会更容易,因为它在DOM中使用,但我找不到从测试定义中访问测试ID的方法问题:
也许QUnit可以以更优雅的方式扩展?例如。在测试代码中,可以调用一个方法来指定单击回调,该回调作为链接插入,以便不需要再次指定测试和模块名称。然后扩展QUnit结果输出器以显示链接。也许它可以存储在QUnit的Test
对象中,虽然我认为这样做的大多数或所有方法都是私有的,这使得这看起来不可能(并不是一个好主意)。
首先,我想做的只是一个非常糟糕的主意吗?或者只是解决方案必须是凌乱的?
答案 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);
});
}
});