Wie verspotten Sie MySQL (ohne ORM) in Node.js?
Ich bin mit Node.js
mit felixge ist node-mysql
client. Ich bin nicht mit einem ORM.
Teste ich das Gelübde abgelegt hat und in der Lage sein wollen, zu verspotten, meine Datenbank, eventuell mit Sinon. Da ich nicht wirklich ein DAL per se (abgesehen von node-mysql
), ich bin nicht wirklich sicher, wie gehen über diese. Meine Modelle sind meist einfache CRUD mit einer Menge von Getter.
Irgendwelche Ideen auf, wie dies zu erreichen?
InformationsquelleAutor der Frage Josh Smith | 2011-12-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit sinon, können Sie ein mock-oder stub-um ein ganzes Modul. Zum Beispiel, nehmen wir an, die
mysql
- Modul hat eine Funktionquery
:queryString
queryParams
sind der input, den Sie erwarten.rows
ist die Ausgabe, die Sie erwarten.Wenn Ihre Klasse unter test jetzt mysql benötigen, und fordert die
query
Methode hat, wird abgefangen und überprüft durch sinon.In der test-Erwartung Abschnitt sollten Sie haben:
und in Ihrem teardown, die Sie wiederherstellen sollte mysql wieder zu normaler Funktionalität:
InformationsquelleAutor der Antwort kgilpin
Kann es eine gute Idee zu abstrahieren Ihre Datenbank in eigene Klasse, die mysql einsetzt. Dann kann passieren, dass die Klasse' instance, um dem Modell die Konstruktoren statt, Sie laden es mithilfe von require().
Mit dieser Einrichtung können Sie ein mock-db-instance für Ihre Modelle, die innerhalb Ihrer unit-test-Dateien.
Hier ist ein kleines Beispiel:
InformationsquelleAutor der Antwort Bijou Trouvaille
Ich bin nicht ganz vertraut mit node.js aber in einem traditionellen Programmierung von Sinn, zu erreichen, testen wie, dass, würden Sie brauchen, zu abstrahieren von der Daten-access-Methode. Könnte man nicht erstellen, die eine DAL-Klasse wie:
Nun im Rahmen eines Tests, patch-deine getAllBooks Klasse während der Initialisierung wie:
Wenn der test-code aufgerufen wird, getAllBooks ersetzt werden durch eine version, die gibt mock-Daten anstelle der eigentlich Aufruf von mysql. Wieder, dies ist eine grobe übersicht, da bin ich nicht ganz vertraut mit node.js
InformationsquelleAutor der Antwort doogle
Können Sie mock aus externen Abhängigkeiten mit horaa
Und ich glaube auch felixge Knoten Sandbox-Modul kann auch etwas ähnliches tun.
Also mit kgilpin gleichen Kontext, in horaa würde es so Aussehen:
InformationsquelleAutor der Antwort dule
Landete ich mit @kgilpin Antwort und am Ende mit etwas wie dieses zu testen, Mysql in einer AWS Lambda:
Ich wollte nicht alle aktuellen Datenbank-verbindungen, so dass ich manuell verspottet alle mysql-Reaktionen.
Durch eine weitere Funktion
.returns
können Sie mock-jede Methode, die aus dercreateConnection
.InformationsquelleAutor der Antwort cameck