2016-05-21 3 views
-1

Ich habe einen JS-Controller mit einigen Routen exportiert. Ich würde gerne auf die Funktionen in den Routen für Unit-Tests zugreifen.Wie erhalten Sie Funktionen von Express-Routen für Unit-Tests?

Hinweis Ich habe viele Blogs gesehen, die sich dafür einsetzen, echte http-Anfragen für Unit-Test-Express-Routen zu erstellen. Das ist nicht genau Unit Testing in meinem Buch. Es ist mehr Unit Testing.

Ich möchte die Funktionen direkt in meinen Tests aufrufen, wodurch (das meiste) das Framework aus dem Test genommen wird.

Zum Beispiel:

controller.js:

var express = require('express'); 
var router = express.Router(); 

function foo(req, res) { ... } 
function bar(req, res) { ... } 

router.route("/api/foo").get(foo); 

router.route("/api/bar").post(bodyParser, bar); 

module.exports = router; 

In meiner Unit-Test, würde Ich mag foo(res, res) direkt anrufen (Ich werde ein paar Mock req und res Objekte machen)

+0

Wenn Sie undokumentierte Dinge mit Express-Routen tun möchten, dann schauen Sie sich den Express-Quellcode an und sehen Sie, ob Sie Zugriff auf die Art und Weise erhalten, wie Routen gespeichert werden. Es ist Open Source - der Code steht Ihnen zur Verfügung. Es hört sich so an, als würden Sie uns bitten, Ihre Hausaufgaben für Sie zu machen. – jfriend00

+0

Natürlich, wenn einige Routen Zugriff auf andere Express-Dinge wie Sitzungen und/oder verschiedene Req- oder Res-Methoden benötigen oder auf Middleware angewiesen sind, dann muss man viel spotten (im Grunde eine Menge von dem, was Express für Sie tut) . Das scheint ein Idiot zu sein, um zu versuchen, einen Routenhandler alleine zu testen. Sie gehen davon aus, dass es isoliert arbeitet und nicht Teil eines Code-Systems (insbesondere Middleware) ist. – jfriend00

+0

@ jfriend00 nicht wirklich viel Spott, zumindest in meinen Fällen. Nur vielleicht Header und Res-Methoden. Wie auch immer, in anderen Sprachen wird viel Spott als ** gute Übung ** angesehen, da der Test jeden einzelnen Anruf bei externen/injizierten Objekten kennt und testet. Wie Mockito in Java - jeder Anruf und jeder Parameter wird berücksichtigt. Wie mache ich irgendetwas, das undokumentiert ist? –

Antwort

2

Der einfachste Weg, um das zu tun, was Sie wollen, ist, jede Funktion zu module.exports hinzuzufügen. Auf diese Weise können Sie den Controller in Ihren Test einbeziehen und die Funktionen direkt aufrufen.

+0

das ist perfekt, danke. Ich vergesse immer wieder, dass Sie Javascript-Entitäten hinzufügen können. –

Verwandte Themen