2014-09-05 3 views
32

Chai è una libreria di asserzioni.Qual è la differenza tra la libreria di assertion, il framework di testing e l'ambiente di testing in javascript?

Mocha e Jasmine sono quadri di prova.

e Karma è un ambiente di test.

Ho già letto Difference between available testing frameworks: mocha, chai, karma, jasmine, should.js etc.

+0

Per rendere le cose ancora più complesse, ci sono anche [client Selenium Webdriver Node.JS] (http://www.slant.co/topics/2814/viewpoints/2/~what-are-the-best-node -js-selenium-webdriver-client-libraries-bindings), alcuni dei quali consentono di eseguire test Jasmine, Cucumber o Moca + Chai al loro interno (ad esempio WebdriverIO). –

+1

La domanda non è ben scritta dato che l'OP fornisce esempi delle 3 cose che vogliono chiarire, e hanno anche dato un link per maggiori informazioni. È quasi la sua risposta al titolo della domanda. Tuttavia, suppongo che, date le informazioni fornite, l'OP desideri una ripartizione più dettagliata. Ma sarebbe utile sapere quali parti non sono ancora chiare per l'OP. – redfox05

risposta

22

librerie asserzione sono strumenti per verificare che le cose siano corrette.
Questo rende molto più facile testare il codice, quindi non devi fare migliaia di dichiarazioni if.
Esempio (utilizzando should.js e Node.js affermare modulo):

var output = mycode.doSomething(); 
output.should.equal('bacon'); //should.js 
assert.eq(output, 'bacon'); //node.js assert 

// The alternative being: 
var output = mycode.doSomething(); 
if (output !== 'bacon') { 
    throw new Error('expected output to be "bacon", got '+output); 
} 

framework di test vengono utilizzati per organizzare ed eseguire prove.
Moka e Jasmine sono due scelte popolari (e sono in realtà un po 'simili).
Esempio (usando moka con should.js qui):

describe('mycode.doSomething', function() { 
    it ('should work', function() { 
    var output = mycode.doSomething(); 
    output.should.equal('bacon');  
    }); 
    it ('should fail on an input', function() { 
    var output = mycode.doSomething('a input'); 
    output.should.be.an.Error; 
    }); 
}); 

Testing ambienti sono i luoghi in cui si esegue il test.

Karma è un caso marginale, nel senso che è una specie di strumento unico, non molto simile. Karma funziona eseguendo i test delle unità all'interno dei browser (per impostazione predefinita su PhantomJS, un browser WebKit headless), per consentire di testare il codice JavaScript basato su browser.

I framework come Mocha e Jasmine funzionano sia nel browser che in Node.js e in genere sono impostati su Nodo.

+0

Mi spiace ancora non capisco. sia il framework di test che il runner di test possono eseguire il mio test. perché abbiamo bisogno di karma ?? – Nader

+3

@Nader Karma rende molto più semplice testare il codice JavaScript basato su browser, altrimenti sei sostanzialmente bloccato nell'esecuzione dei test in Node.js. Mentre Node va bene per un sacco di cose, non funziona così bene per il codice basato su browser. –

+0

Mi piace il tuo esempio di asserzione in vanilla JS. Vale la pena sottolineare che è possibile scrivere test di unità senza una libreria di asserzioni. Le librerie di asserzioni sono come [should.js] (https://shouldjs.github.io/), [ChaiJS] (http://chaijs.com/) o [Node.js Assert] (https://nodejs.org /api/assert.html) sono meri [zucchero sintattico] (https://en.wikipedia.org/wiki/Syntactic_sugar) perché forniscono più test leggibili dall'uomo permettendoti di scrivere asserzioni in una sintassi del linguaggio naturale. – gfullam

29

L'ambiente di test (o test runner) è ciò che esegue tutti i test. Li avvia, aggrega i risultati, ecc.

Il framework di test è ciò che si utilizza per creare ciascuno dei test. Ad esempio, il gelsomino utilizza una sintassi di

it('name of test', function() { 
    // do some tests 
}); 

La biblioteca affermazione è ciò che fa la verifica effettiva del test risultati

it('name of test', function() { 
    assert x == 5 //pseudocode, the syntax will vary based on your asserting framework 
}); 
+0

Molto bella spiegazione :) merita più punti. –

+0

Si noti che il framework di test può anche aggregare i risultati. Per esempio. la moka ha diversi reporter diversi. –