我刚刚在我的express应用程序中添加了shouldjs和mocha进行测试,但是我想知道如何测试我的应用程序。我想这样做:
app = require '../app' routes = require '../src/routes' 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', -> routes.show_create_user_screen().should.be.an.object
当然,测试套件中的最后一个测试只是告诉med,res.render函数(在show_create_user_screen中调用)是未定义的,可能是因为服务器未运行且配置尚未完成。所以我想知道其他人如何设置他们的测试?
好的,虽然测试路由代码是您可能要做或可能不想做的事情,但是通常,请尝试将您感兴趣的业务逻辑分离为纯JavaScript代码(类或函数),这些纯JavaScript代码与express或正在使用的框架分离,使用香草摩卡咖啡测试来测试。一旦实现,如果您想真正测试在Mocha中配置的路由,则需要将模拟req, res参数传递到中间件函数中,以模仿Express / Connect与中间件之间的接口。
req, res
对于一个简单的例子,您可以创建一个模拟res对象,其render功能类似于以下内容。
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
同样,仅FYI中间件函数不需要返回任何特定值,这就是它们req, res, next对测试中应重点关注的参数所做的事情。
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); }); }); });