一尘不染

如何使用Mocha测试我的Express应用程序?

node.js

我刚刚在我的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中调用)是未定义的,可能是因为服务器未运行且配置尚未完成。所以我想知道其他人如何设置他们的测试?


阅读 263

收藏
2020-07-07

共1个答案

一尘不染

好的,虽然测试路由代码是您可能要做或可能不想做的事情,但是通常,请尝试将您感兴趣的业务逻辑分离为纯JavaScript代码(类或函数),这些纯JavaScript代码与express或正在使用的框架分离,使用香草摩卡咖啡测试来测试。一旦实现,如果您想真正测试在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

同样,仅FYI中间件函数不需要返回任何特定值,这就是它们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);
      });
    });
  });
2020-07-07