首先,尽管测试你的路由代码是你可能想要或不想要做的事情,但通常来说,尝试将有趣的业务逻辑分离为纯JavaScript代码(类或函数),这些代码与express或您正在使用的任何框架解耦,并使用原生mocha测试进行测试。一旦你实现了这一点,如果你想真正测试在mocha中配置的路由,你需要传递模拟req, res
参数到你的中间件函数中,以模仿express/connect和你的中间件之间的接口。
对于一个简单的情况,你可以创建一个模拟的res
对象,带有一个类似下面的render
函数。
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
另外仅供参考,中间件函数不需要返回任何特定值,重点是它们如何使用req、res、next
参数在测试中进行处理。
以下是你在评论中要求的一些JavaScript代码。
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);
});
});
});