2016-04-25 19 views
0

Hallo Ich bin ziemlich neu zu NodeJs und ich versuche, meine ersten Tests zu schreiben.Einfache Unit Testing NodeJS/Express

Ich bin irgendwie mit dem Setup fest, so dass ich auf etwas Hilfe gehofft hatte.

Ich schrieb diese beiden Funktionen:

app.js: 

var express = require('express') 
    , cors = require('cors') 
    , app = express(); 

app.get('/a_nice_jsonp',cors(corsOptions), function(req, res, next){ 
    var result = parseCookies(req); 
    res.jsonp(result); 
}); 

app.get('',function(req,res,next){ 
    res.statusCode = 200; 
    res.end() 
}); 

ich exportiere es nicht als Modul, wie es meine einzige Datei.

Ich nehme an, es ist ziemlich einfach, die Tests dafür zu schreiben. Ich begann mit etwas wie folgt aus:

app-test.js: 

var expect = require('expect.js'); 
var express = require('express'); 
var expressApp = express(); 

describe('app js test', function() { 
    describe('GET /', function() { 
    it('should respond to GET with empty path', function() { 
     expressApp.get('', function(req, res, body){ 
     expect(res.status).to.equal(200); 
     }); 
    }) 
    }); 
}); 

ich es wirklich annehmen, wie eine einfache Aufgabe liest, aber ich glaube, über das Setup des Tests scheitern und wie es zu tun.

Kann mir hier jemand helfen?

EDIT: Der obige Test läuft gut. Ich habe jedoch Schwierigkeiten, z.B. .end() sowie die result in der jsonp request. Ich weiß einfach nicht wie?

+0

Gibt es eine Fehlermeldung? Wie hast du den Test durchgeführt? –

+0

Sorry, ich war nicht präzise genug. Der obige Test läuft gut. Aber das ist das einzige, was ich testen kann. Z.B. Wie würde ich res.jsonp (Ergebnis) testen? Ich habe keine Ahnung, wie ich das angehen soll. Ich werde etwas mehr erklären. Danke für den Hinweis – Dribel

+0

Kein Problem. Nun, Sie können es auf die gleiche Weise tun, wie Sie es getan haben, um den Antwortstatus zu überprüfen. Und auch, weil die Antwort "jsonp" ist. Dann könnten Sie versuchen, das Ergebnis mit einer Dummy-Funktion zu analysieren, um zu überprüfen, ob das Ergebnis gültig ist oder nicht. –

Antwort

1

Wenn Sie das tun

expressApp.get('', function(req, res, body){ 
    expect(res.status).to.equal(200); 
    }); 

Sie nur die Route zuordnen.

Ihre REST-API zu testen, müssen Sie eine Bibliothek wie supertest verwenden (es ist ein Beispiel in diesem Link Express + Mokka mit Prüfung)

funktioniert es auf diese Weise

var request = require('supertest'); 
var express = require('express'); 

var app = express(); 

app.get('/a_nice_jsonp',cors(corsOptions), function(req, res, next){ 
    var result = parseCookies(req); 
    res.jsonp(result); 
}); 

app.get('',function(req,res,next){ 
    res.statusCode = 200; 
    res.end() 
}); 

describe('app js test', function() { 
    describe('GET /', function() { 
    it('should respond to GET with empty path', function (done) { 
     request(app) 
       .get('') 
       .expect(200) 
       .end(done) 
    }); 
    }); 
}); 

Edited mit getrennten Dateien

app.js

var express = require('express') 
    , cors = require('cors') 
    , app = express(); 

app.get('/a_nice_jsonp',cors(corsOptions), function(req, res, next){ 
    var result = parseCookies(req); 
    res.jsonp(result); 
}); 

app.get('',function(req,res,next){ 
    res.statusCode = 200; 
    res.end() 
}); 
module.exports = app; 

app-test.js

var request = require('supertest'); 
var app = require('app.js'); 


describe('app js test', function() { 
    describe('GET /', function() { 
    it('should respond to GET with empty path', function (done) { 
     request(app) 
       .get('') 
       .expect(200) 
       .end(done) 
    }); 
    }); 
}); 
+0

Danke für Ihre schnelle Antwort. Ich werde in Supertest schauen, was es ist und all das. Danke für deinen Hinweis. – Dribel

+0

Eine kurze Frage. Das klingt vielleicht ein bisschen dumm, aber woher weiß ich, dass die eigentliche Datei getestet wird? Ich injiziere oder benutze die app.js-Datei zu keinem Zeitpunkt in meinem Test? – Dribel

+0

Ich habe es bearbeitet, jetzt haben Sie beide Dateien (app.js/app-test.js). Wie Sie sehen können, wird App innerhalb jeder Anfrage (App) verwendet. – QoP