2014-09-05 8 views
32

Chai ist eine Assertion-Bibliothek.Was ist der Unterschied zwischen Assertion-Bibliothek, Test-Framework und Testumgebung in Javascript?

Mocha und Jasmine sind Test-Frameworks.

und Karma ist eine Testumgebung.

Ich habe bereits Difference between available testing frameworks: mocha, chai, karma, jasmine, should.js etc gelesen.

+0

Um die Dinge noch komplexer zu machen, gibt es auch [Selenium Webdriver Node.JS Clients] (http://www.slant.co/topics/2814/viewpoints/2/~what-are-the-best-node -js-selen-webdriver-client-libraries-bindings), von denen einige Jasmin-, Gurken- oder Moca + Chai-Tests in ihnen ausführen können (zB WebdriverIO). –

+1

Die Frage ist nicht gut geschrieben, da das OP Beispiele für die drei Dinge gibt, die sie klären wollen, und sie haben sogar einen Link für weitere Informationen gegeben. Es ist fast eine eigene Antwort auf den Titel der Frage. Ich gehe jedoch davon aus, dass das OP angesichts der bereitgestellten Informationen eine detailliertere Untergliederung wünscht. Aber es würde helfen zu wissen, welche Teile für das OP noch unklar sind. – redfox05

Antwort

22

Assertion Bibliotheken Werkzeuge sind, um zu überprüfen, dass die Dinge richtig sind.
Dies macht es viel einfacher, Ihren Code zu testen, so dass Sie nicht Tausende von if Aussagen machen müssen.
Beispiel (unter Verwendung von should.js und Node.js behauptet Modul):

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

Testing Frameworks verwendet werden, um Tests zu organisieren und durchzuführen.
Mokka und Jasmin sind zwei populäre Wahlen (und sie sind wirklich irgendwie ähnlich).
Beispiel (unter Verwendung von Mokka mit should.js hier):

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

Testumgebungen sind die Orte, an denen Sie Ihre Tests laufen.

Karma ist ein bisschen ein Randfall, in dem Sinne, dass es ein einmaliges Werkzeug ist, nicht viele mögen es. Karma arbeitet mit Unit-Tests innerhalb von Browsern (standardmäßig PhantomJS, ein kopfloser WebKit-Browser), um browserbasierten JavaScript-Code zu testen.

Frameworks wie Mocha und Jasmine funktionieren sowohl im Browser als auch mit Node.js und standardmäßig als Node.

+0

Sorry, ich verstehe es immer noch nicht. Sowohl Test Framework als auch Test Runner können meinen Test durchführen. warum brauchen wir Karma? – Nader

+3

@Nader Karma macht es viel einfacher, Browser-basierten JavaScript-Code zu testen, ansonsten sind Sie im Grunde mit dem Ausführen der Tests in Node.js stecken. Während Node für viele Dinge in Ordnung ist, funktioniert es nicht so gut für Browser-basierten Code. –

+0

Ich mag Ihr Beispiel für eine Behauptung in Vanille JS. Es ist wichtig zu betonen, dass Sie Komponententests ohne eine Assertion-Bibliothek schreiben können. Assertion-Bibliotheken wie [sollte.js] (https://shouldjs.github.io/), [ChaiJS] (http://chaijs.com/) oder [Node.js Assert] (https://nodejs.org /api/assert.html) sind nur [syntaktischer Zucker] (https://en.wikipedia.org/wiki/Syntactic_sugar), weil sie mehr menschenlesbare Tests bieten, indem Sie Assertionen in einer natürlichen Sprachsyntax schreiben können. – gfullam

29

Die Testumgebung (oder der Test Runner) ist die Grundlage für alle Ihre Tests. Es startet sie, aggregiert Ergebnisse usw.

Das Test-Framework ist, was Sie verwenden, um jeden der Tests zu erstellen. Zum Beispiel verwendet Jasmin eine Syntax von

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

Die Behauptung Bibliothek ist, was die eigentliche Prüfung Ihres Tests tut führt

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

Sehr schöne Erklärung :) verdient mehr Punkte. –

+0

Beachten Sie, dass das Test-Framework auch Ergebnisse aggregieren kann. Z.B. Mocha hat mehrere verschiedene Reporter. –

Verwandte Themen