OK, prima anche se test del codice di routing è qualcosa che si può o non può decidere di fare, in generale, cercare di separare la logica di business interessante in puro codice javascript (classi o funzioni) che sono disaccoppiati da espresso o qualunque struttura tu stia usando e usi i test di Vanilla Mocha per provarlo. Una volta raggiunto questo risultato, se vuoi veramente testare i percorsi che configuri in mocha, devi passare i parametri simmetrici req, res
nelle tue funzioni middleware per simulare l'interfaccia tra express/connect e il tuo middleware.
Per un semplice caso, è possibile creare un oggetto fittizio res
con una funzione render
simile a questa.
describe 'routes', ->
describe '#show_create_user_screen', ->
it 'should be a function', ->
routes.show_create_user_screen.should.be.a.function
it 'should return something cool', ->
mockReq = null
mockRes =
render: (viewName) ->
viewName.should.exist
viewName.should.match /createuser/
routes.show_create_user_screen(mockReq, mockRes).should.be.an.object
Anche solo FYI funzioni middleware non hanno bisogno di restituire un valore particolare, è quello che fanno con i parametri req, res, next
che si dovrebbe concentrare su in fase di test.
Ecco alcuni JavaScript come richiesto nei commenti.
describe('routes', function() {
describe('#show_create_user_screen', function() {
it('should be a function', function() {
routes.show_create_user_screen.should.be.a["function"];
});
it('should return something cool', function() {
var mockReq = null;
var mockRes = {
render: function(viewName) {
viewName.should.exist;
viewName.should.match(/createuser/);
}
};
routes.show_create_user_screen(mockReq, mockRes);
});
});
});
fonte
2012-01-13 14:51:05
Proprio come aggiungere che l'esempio precedente è stato pubblicato perché era breve e conciso. Di solito testerei che le funzioni oi valori appropriati sugli oggetti req/res siano stati impostati/richiamati dopo che una delle mie funzioni del router è stata chiamata. Per il quale la risposta sotto è adeguata. Non si dovrebbe testare la funzionalità del router, questo è il lavoro del framework web. –