2016-09-01 9 views
0

私は一連のアルゴリズムをテストしています。それぞれは同じ目的を持っていますが、異なる結果があり、グラフでグラフで見ることができます。特定のテストの出力結果を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を調べ、に与えられたコールバックのリンクを追加します。それはDOMに使用される各テストのためにQUnitのハッシュIDを使用するように容易になるだろうが、私はテスト定義

問題の中から、テストのIDにアクセスする方法を見つけることができません。

    をただ
  1. (QUnitはとにかくこれをサポートしている場合、私は知りませんが)それはテスト(ネストされたモジュール)の異なる深さに対処するために複雑なコードが必要になります
  2. 同じ名前のモジュールで複数のテストを処理することができません
  3. それは、本当にハッキーですね。

おそらく、QUnitをよりエレガントな方法で拡張できますか?例えば。テストコード内でメソッドを呼び出してオンクリックコールバックを指定することができます。クリックコールバックはリンクとして挿入され、テストおよびモジュール名を再度指定する必要はありません。次に、QUnit結果出力を拡張してリンクを表示します。おそらく、それはQUnitのTestオブジェクト内に格納されている可能性がありますが、そうする必要があるメソッドのほとんどまたはすべてがプライベートなので、これは不可能なようです(良い考えではないでしょう)。

私は最初に本当に悪い考えをしていますか?それとも、解決策が厄介でなければならないのでしょうか?

答えて

0

トリックは、そのIDを記録するためにテスト内でQUnit.config.current.testIdを使用することです。結果に追加テストを探してクリックすると閉鎖を実行し、テスト結果の行にボタンを追加し、このコードを使用しそして

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); 
     }); 
    } 
}); 
関連する問題