我应该如何自动启动nodejs应用程序进行测试

Gro*_*fit 7 automated-tests node.js express

我有一个nodejs restful样式服务没有前端,它只接受数据,然后用它做一些事情.

我已经对我想要的大多数方法级别的东西进行了单元测试,但是现在我想基本上做一些自动化测试以证明它们一起工作.当我使用ASP.MVC和IIS时,它很容易,因为服务器始终打开,所以我只是设置场景(将虚拟guff插入DB)然后创建一个HttpRequest并将其发送到服务器并声明我得到了我期望的.

但是在nodejs中存在一些挑战,因为应用程序需要通过命令行或其他一些机制运行,所以假设我有一个app.js会开始监听,有没有办法在我之前自动启动它运行我的测试,然后在我的测试完成后关闭它?

我目前正在使用Yadda和Mocha进行测试,所以我可以保持它以BDD风格的方式编写,但是我希望Web应用程序的启动与我正在使用的框架无关.

gim*_*ete 10

只需公开一些启动和停止Web服务器的方法.你的app.js文件可能是这样的:

var app = express()
var server = null
var port = 3000

// configure your app here...

exports.start = function(cb) {
  server = http.createServer(app).listen(port, function () {
    console.log('Express server listening on port ' + port)

    cb && cb()
  })
}

exports.close = function(cb) {
  if (server) server.close(cb)
}

// when app.js is launched directly
if (module.id === require.main.id) {
  exports.start()
}
Run Code Online (Sandbox Code Playgroud)

然后在你的测试中你可以做这样的事情(基于mocha的例子):

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

before(function(done) {
  app.start(done)
})

after(function(done) {
  app.close(done)
})
Run Code Online (Sandbox Code Playgroud)