使用mocha设置/拆除express.js应用程序

mrm*_*oey 18 makefile node.js express zombie.js

我正在尝试使用mocha创建一个独立的测试套件,在一个完美的世界中,我将启动我的express.js应用程序,使用zombie渲染页面,检查一堆东西,然后拆除/杀死express.js应用程序.

有没有简单/最好的方法来做到这一点?

NB.我可以在运行测试之前运行快速应用程序服务器,但如果你不打算剃掉它们,那么Yaks有什么用处.

Ove*_*d D 28

首先,您需要将实际的应用程序设置移动到一个模块中,然后将其导入到实际启动应用程序的文件中.现在这是分开的,您可以在实际收听之前让应用程序处于完整状态.

您应该将应用程序的实际设置移动到一个单独的文件中,让我们称之为app.js,可以从您运行节点的文件中调用listen,让我们称之为index.js.

所以,app.js看起来像:

    var express = require('express')
  , routes = require('./routes');

var app = module.exports = express.createServer();

// Configuration

app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
  app.use(express.errorHandler());
});

// Routes

app.get('/', routes.index);
Run Code Online (Sandbox Code Playgroud)

和index.js看起来像:

var app = require('./app');

app.listen(3000, function(){
  console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
});
Run Code Online (Sandbox Code Playgroud)

这可以分离您的应用程序的加载,实际上让它听,允许您将该应用程序加载到您的单元测试中.

在单元测试中,您将在设置方法和拆解方法中执行某些操作来启动和关闭服务器.

在文件test/app_tests.js中:

describe('app', function(){
  var app = require('../app');
  beforeEach(function(){
    app.listen(3000);
  });
  // tests here
  afterEach(function(){
    app.close();
  })
});
Run Code Online (Sandbox Code Playgroud)

  • 优秀的解决方案!这是正确的方法.一个修改:你实际上应该关闭app.listen的结果,而不是app本身,即:(在beforeEach中)"instance = app.listen(3000);" ...然后(在afterEach中)"instance.close()" (2认同)