2012-12-06 25 views
11

Ho appena trovato qHint, un metodo per integrare il test jsHint in Qunit ... ma non funziona localmente (non intendo localhost) tranne in Firefox.Saltare un test in Qunit

così ho voluto aggiungere un "warning" o "avviso", NON è un fallimento del test, mostrando che il test è stato saltato:

// 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'); 
    }); 
} 

vorrei solo per renderlo più evidente che un test è stato saltato, è possibile?


Update: Grazie per Odi la risposta !, ma ho dovuto fare una leggera modifica per far funzionare il codice 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

QUnit ha aggiunto un [metodo '' skip() '] (http://api.qunitjs.com/QUnit.skip/) nella v1.16! – Mottie

risposta

17

Ho avuto la stessa esigenza e Ho semplicemente definito un nuovo tipo di test() che ho chiamato testSkip().

Questo metodo di prova sostituisce semplicemente la funzione di test e cambia il nome in <test name> (SKIPPED). Dopo che il test è considerato superato da QUnit.

Per indicare ulteriormente che si tratta di un test saltato, ho aggiunto una funzione di callback a QUnit.done per ogni test saltato per cambiare il colore del test nell'output HTML in giallo. Questi callback vengono eseguiti quando viene eseguita la suite di test. L'impostazione diretta del valore non funziona, perché QUnit applica gli stili per i test passati/falliti alla fine dell'esecuzione.

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; 

Quindi è possibile utilizzare al posto di testSkip()test() per i test saltati.

Per la mia suite di test il risultato sembra che: Skipped tests in QUnit

+0

Ho dovuto apportare una leggera modifica per farlo funzionare in QUnit v1.11.0pre (pubblicato sopra). Grazie! – Mottie

+1

Dovrai aggiungere "ok (true);" all'interno del test modificato o QUnit v1.2 si lamenterà che nel test ci sono zero affermazioni. –

+0

@FrancoisVanderseypen Ci * sono * zero assert nel test, non sarebbe meglio usare 'expect (0);' invece? – Potherca

2

Per tutti coloro che possono aver lustrato nel corso dei commenti, il commento di Mottie sulla questione sottolinea che Qunit now has a skip() function. Basta sostituire qualsiasi chiamata a test() con skip() per saltare quel test.