2012-12-06 186 views
11

我剛剛發現qHint,一種將jsHint測試集成到Qunit中的方法......但它在本地(我不是指本地主機)除了在Firefox中不起作用。在Qunit中跳過測試

所以我想添加一個「警告」或「通知」,而不是一個測試失敗,表明該測試被跳過:

// do unit test if not local or local and running Firefox 
t = QUnit.isLocal; 
if (!t || (t && /Firefox/.test(navigator.userAgent))) { 
    jsHintTest('JSHint core check', 'js/myplugin.js'); 
} else { 
    test('JSHint core check (skipped)', function(){ 
     ok(true, 'check not done locally'); 
    }); 
} 

我只是想使它更加明顯,試驗跳過了,這可能嗎?


更新:由於ODI的答案!但我不得不作出輕微修改使QUnit v1.11.0pre工作代碼:

QUnit.testSkip = function(testName, callback) { 
    QUnit.test(testName + ' (SKIPPED)', function() { 
     if (typeof callback === "function") { 
      callback(); 
     } 
     var li = document.getElementById(QUnit.config.current.id); 
     QUnit.done(function() { 
      li.style.background = '#FFFF99'; 
     }); 
    }); 
}; 
testSkip = QUnit.testSkip; 
+3

QUYIT在v1.16中增加了一個['skip()'方法](http://api.qunitjs.com/QUnit.skip/)! – Mottie

回答

17

我有同樣的要求,我簡單地定義了一種新的test(),我稱之爲testSkip()

此測試方法只是取代您的測試功能並將名稱更改爲<test name> (SKIPPED)。之後,QUnit認爲測試已通過。

爲了進一步表明這是一個跳過的測試,我爲每個跳過的測試添加了一個回調函數QUnit.done,以將HTML輸出中的測試顏色更改爲黃色。這些回調在測試套件完成時執行。直接設置值不起作用,因爲QUnit在運行結束時將通過/失敗測試的樣式應用於此。

QUnit.testSkip = function() { 
    QUnit.test(arguments[0] + ' (SKIPPED)', function() { 
     QUnit.expect(0);//dont expect any tests 
     var li = document.getElementById(QUnit.config.current.id); 
     QUnit.done(function() { 
      li.style.background = '#FFFF99'; 
     }); 
    }); 
}; 
testSkip = QUnit.testSkip; 

然後你可以使用testSkip()而不是test()跳過的測試。

對於我的測試套件的結果看起來像這樣: Skipped tests in QUnit

+0

我不得不作一些修改,讓它在QUnit v1.11.0pre(上面發佈)中工作。謝謝! – Mottie

+1

您需要在修改後的測試中添加'ok(true);'或QUnit v1.2將會抱怨測試中有零個斷言。 –

+0

@FrancoisVanderseypen在測試中有*個* assert,使用'expect(0);'代替它會更好嗎? – Potherca

2

對於任何人誰可能已經呆滯的評論,Mottie對這個問題的評論指出,Qunit now has a skip() function。只需用skip()替換test()的任何呼叫即可跳過該測試。