Testen von Datenbank-code in NodeJS
Einsatz Von PostgreSQL.
Ich versuche ein geeignetes test-suite für eine API. So weit es funktioniert, aber die tests werden durchgeführt, auf der Haupt-Datenbank direkt. Dann habe ich zu entfernen alles, was meine tests erstellt oder bearbeitet in diesem Fall.
Ich weiß, es ist eine schlechte Sache zu tun (weil ich vergessen können, um wieder eine änderung, oder mess up der Sequenzen). Also ich würde gerne eine test-Datenbank mit der gleichen Struktur und Basis-Daten, und löschen Sie ihn danach. Ist dieser Ansatz, der gut zu nehmen in diesem Fall?
Und wenn ich will es so machen, wie soll ich es tun? Gibt es eine Möglichkeit in NodeJS zum ausführen einer SQL-Skript? Ich habe versucht, mit einem shell-Skript, aber so weit ist es ein komplett Durcheinander mit den Berechtigungen, so dass ich dachte, es würde einfacher sein, mit NodeJS direkt.
Bin ich mit Mocha für meine tests.
- Sind diese test für die API-Endpunkte, oder für Ihre Modelle?
- Für die API-Endpunkte. Ich Teste jede route, versuchen Sie jeden edge-Fall kann ich mir vorstellen, versuchen, gute und böse Wünsche. Diese Anforderung oft erstellen Sie Zeilen in der Datenbank, die verwendet werden in den kommenden tests. Ich bin mir nicht sicher, ich mache von diesem Recht aber.
- Wenn Sie möchten, um Ihre tests fest, ich würde vorschlagen, verspotten Sie Ihre Daten, anstatt Sie einrichten ein weiterer Punkt des Scheiterns (db-verbindungen, Schemas, Fragen, etc.) die sind wirklich nicht in den Anwendungsbereich der Test-API-endpoints. Wenn Sie eine Verbindung zu einer Datenbank, dieser wandelt die tests von unit-tests, integration-tests. Beide haben Ihren Platz, aber Sie sollten nicht mischen Sie.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde vorschlagen, eine separate test-Datenbank. Es kann leicht sein, und Sie wollen, um zu wissen, die Daten, die dort (so können Sie es testen!). Ein Basis-Datensatz verarbeiten kann alle Ihre business-Regeln können exportiert werden als SQL-Datei (oder einige export-Methode).
In der Regel Ihre Anwendung eine Verbindung zu der Datenbank, und Ihre test-Frameworks haben einige Vorgehensweise zum ausführen einer Methode vor Prüfungen ab. Es ist hier, dass Sie angeben, die test-DB. Ihre database access objects (DAOs), oder Skripte, Methoden, nutzen Sie die wichtigste Verbindung in irgendeiner Weise, entweder als einen parameter einer Methode oder require-Anweisung, etc.
Als Beispiel, ich bin mit dem knex-Modul die Verbindung zu der DB und erstellen von Abfragen. Ich initialisieren und die Referenz ist mein einziger DB-Verbindung wie angegeben in Ihre docs.
Meine DAOs Holen Sie sich die Verbindung so:
Nun in meine unit-tests, bevor Sie eine test-suite ausgeführt wird, ich kann meine Verbindung zu den test-DB
Und dort haben Sie es! Exakt gleiche code verwendet wird, in test und Produktion und Ihre Produktions-DB-de-gekoppelt aus Ihren tests. Dieses Muster arbeiten kann, mit einer Menge von frameworks, so dass Sie anpassen müssen (und bereinigen Sie die tests, wenn Sie junking die test-DB, vielleicht eine Standard wiederherstellen, wenn alle tests abgeschlossen sind).
Edit: Durch die Art und Weise, knex arbeitet mit postgre und ist eine tolle Möglichkeit zum erstellen von Abfragen in reiner node JS. Es kann auch ausführen raw-SQL.