2016-09-01 34 views
0

我正在測試一組算法。每個人都有相同的目的,但有不同的結果,可以在圖表中以圖形方式查看。添加附加html到特定測試的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

問題的方法:

  1. 無法與同名的模塊中處理多個測試(雖然我不知道是否QUnit支持此反正)
  2. 這將需要複雜的代碼來處理的測試不同深度(嵌套模塊)
  3. 它只是看起來真的很黑。

也許QUnit可以以更優雅的方式擴展?例如。在測試代​​碼中,可以調用一個方法來指定單擊回調,該回調將作爲鏈接插入,以便不需要再次指定測試和模塊名稱。然後擴展QUnit結果輸出器以顯示鏈接。也許它可以存儲在QUnit的Test對象中,但我認爲大多數或所有的方法都需要這樣做,因爲這是不可能的(這不是一個好主意)。

我想要做的只是一個非常糟糕的主意呢?或者僅僅是解決方案必須是混亂的?

回答

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); 
     }); 
    } 
}); 
相關問題