Über mich | Kontakt | Archiv

Thomas Bandt

Dieses Blog wird nicht mehr gepflegt. Zur neuen Website!

Node.js: Abweichende Konfiguration für Tests

Ich schreibe für meinen Datenzugriff in Node.js gegenwärtig Tests, die dann tatsächlich auch auf die Datenbank zugreifen. Um nicht die eigentliche Datenbank meiner Anwendung mit Testdaten zuzumüllen, brauchte ich einen Weg, während dieser Tests auf eine abweichende Konfiguration zurückzugreifen.

Den Grundstock bildet meine config.js, in der ich alle möglichen Einstellungen der Anwendung ablege, unter anderem auch den Namen der Datenbank und den Connection-String:

var config = {
    debug: {
        database: {
            connectionString: "mongodb://localhost:27017/node-simple-blog-dev",
            databaseName: "node-simple-blog-dev"
        }
    },
    database: {
        connectionString: "mongodb://localhost:27017/node-simple-blog",
        databaseName: "node-simple-blog"
    }
};

module.exports = config;

(Ob das so der beste Weg ist, wird sich noch zeigen ;-).)

Um nun während der Tests auf die -dev-Datenbank zuzugreifen, muss nun also irgendwo ein “Switch” integriert werden.

Ich habe mich dafür entschieden, das über eine Umgebungsvariable zu machen:

process.env.DEBUG = false;

Diese setze ich zu Beginn der Anwendung in meiner app.js, die der Startpunkt ist.

An der Stelle, an der ich den Connection-String auslese, kann ich nun einfach darauf prüfen:

var connectionString = process.env.DEBUG === "true" ?
        config.debug.database.connectionString :
            config.database.connectionString;

Was mich ein paar Minuten gekostet hat: persistiert und damit auch ausgegeben werden hier Strings, folglich liefert die Variable kein Boolean false, sondern einen String “false” zurück.

In meinem Gulp-Task kann ich nun die Variable einfach auf true setzen, und somit die Debug-Konfiguration aktivieren:

gulp.task("mocha", function() {
    process.env.DEBUG = true;

    return gulp.src([
        "*Spec.js",
        "data/**/*Spec.js"])
        .pipe(mocha({reporter: "spec"}));
});

That’s it.



« Zurück