2016-09-01 1 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을 조사한 다음 addAlgoLink()에 주어진 콜백 링크를 추가합니다. 이 DOM에 사용되는 각 시험 QUnit의 해시 ID를 사용하는 것이 더 쉽습니다,하지만 난 테스트 정의 내에서

문제 테스트의 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); 
     }); 
    } 
}); 
관련 문제