2016-04-01 8 views
1

Ich sehe zwei populäre Bibliotheken in NPM - Chai und Check-Typen. Ich versuche ihren beabsichtigten Zweck zu verstehen.Javascript Assertion Bibliotheken - Chai vs Check-Typen

Ich weiß, dass Chai für Unit-Tests TDD/BDD-Stil verwendet wird und verfügt über eine reiche Assertion-Bibliothek.

check-Typen (https://github.com/philbooth/check-types.js) auf der anderen Seite ist einfach eine Assertion-Bibliothek zu prüfen, ob Argumente der richtigen Typen sind. Es sieht nicht so aus, als ob es für Unit-Tests gedacht ist. Ich gehe davon aus, dass dies innerhalb meiner Javascript-Funktionen verwendet werden soll, um sicherzustellen, dass die in die Funktion übergebenen Argumenttypen vom erwarteten Typ sind.

Also die Frage ist check-Typen Bibliothek redundant, wenn Chai bereits eine reiche Assertion-Bibliothek unterstützt? Oder sind sie für verschiedene Zwecke gedacht? Kann ich Chai in meinem Code (außerhalb meiner Tests) auch verwenden, um zu prüfen, ob Variablen vom richtigen Typ sind?

Antwort

1

Wie Sie schon richtig angenommen, gibt es zwei verschiedene Anwendungsfälle hier:

chai ist ein Assertion-Bibliothek soll nur für Tests - und deshalb ist es in keiner Weise optimiert innerhalb eines normalen App laufen . Es gibt keine Minifed-Version und es erfordert viel Bibliothekscode für verschiedene Testmöglichkeiten (should, expect und assert). Und das wichtigste: Wenn eine Bedingung für eine Behauptung ist nicht erfüllt, chai wird alles sofort ein spezielles AssertionError werfen, das mit gängigen Test-Geschirren wie Karma oder Mokka verarbeitet sollte.

Check-Typ auf der anderen Seite soll nur Typ- und Wert-Kontrolle einfacher und besser lesbar innerhalb einer App machen. In den meisten Fällen können Sie entscheiden, was zu tun ist, wenn eine Assertion nicht erfüllt wird (nicht werfen).

FAZIT:

Während man natürlich CHAI außerhalb Ihrer Tests verwenden könnte, würde ich auf jeden Fall empfehlen es nicht, da es nur die Größe Ihres Build mit vielen nicht verwendeten Methoden erhöhen würde und Sie würden eine try{} catch(){} brauchen blockieren Sie jede Behauptung.

Und während Sie Check-Typen für Ihre Tests verwenden könnten, würden Sie die AssertionErrors für jeden werfen müssen selbst testen (was ermüdend ist).

Also: Nein, keine der beiden Bibliotheken ist redundant. Sie können Chai als eine Art Übermenge von Bibliotheken wie Check-Typen (Chai selbst verwendet seine eigene Typ-Erkennung-Bibliothek namens type-detect (von denen ich einer der Betreuer;))), die sie für die Verwendung verwendet in Test-Kabelbäumen.

+0

Danke für die Erklärung. Der Unterschied ist jetzt klar. – shuaybi

+0

Könnten Sie so freundlich sein und es als Antwort markieren? Vielen Dank! :) – Charminbear