2013-02-21 9 views
9

Ho recentemente iniziato a utilizzare QUnit per testare il mio codice JavaScript e sono un po 'confuso da una funzionalità inclusa nella documentazione: expect().Perché dovrei mai usare expect() quando si scrive test con QUnit?

Secondo la documentazione, expect() è progettato per:

[s] pecify quanti asserzioni si prevede di eseguire all'interno di un test.

Ed ecco l'esempio che danno:

test("a test", function() { 
    expect(2); 

    function calc(x, operation) { 
    return operation(x); 
    } 

    var result = calc(2, function(x) { 
    ok(true, "calc() calls operation function"); 
    return x * x; 
    }); 

    equal(result, 4, "2 square equals 4"); 
}); 

L'unica cosa che vedo qui è la manutenzione incubo. Ogni volta che aggiungi un'asserzione a un test, devi aggiornare quel numero o il test fallirà. Esiste un'applicazione pratica per questo tipo di funzionalità?

+1

Completa ipotesi da parte di qualcuno che conosce bugger tutto su QUnit: Può essere usato come una guardia contro loop infiniti. Sembra imporre un limite massimo, non un minimo, quindi puoi usare 'expect (100)' (o simili) e dovrebbe andare bene. –

+1

Questo è sbagliato, non è né un minimo né un massimo, definisce l'esatto ammontare di asserzioni che ti aspetti. Se il numero è al di sotto o al di sopra della durata, il test fallirà. – Odi

risposta

10

L'unica cosa che vedo qui è l'incubo di manutenzione ... Esiste un'applicazione pratica per questo tipo di funzionalità?

Bene, il modo in cui penso che lo expect è destinato a essere utilizzato con attività significative raggruppate. E 'utile per gli eventi di test o di callback, ad esempio:

test('trigger an event', function() { 
    expect(1); 

    $('div') 
    .on('click', function() { ok(1) }); 
    .trigger('click'); 
}); 

Non diventa un incubo se si mantiene compiti significativi raggruppati in piccoli test, in cui si prevede solo 2 o 3 affermazioni.

+3

Per elaborare un po ', quando si esegue il test del codice asincrono, è possibile che l'evento asincrono non si verifichi e il test non verrà eseguito. In tal caso, vorrai un fallimento, non un test saltato silenziosamente. – adamesque

3

Può essere utilizzato come protezione per assicurarsi di non aver scritto in qualche modo un test che non può essere eseguito. Se prendi l'abitudine di scrivere il numero previsto di test, dovresti scrivere in qualche modo una suite di test in cui un test è nascosto da QUnit per qualche motivo, QUnit lo raccoglierà prima di te.