我应该如何自动启动我的nodejs应用程序进行testing

我有一个nodejs宁静风格的服务没有前端,它只是接受数据,然后做一些事情。

我有unit testing了大部分方法级别的东西,但是现在我想基本上做一些自动化testing来certificate它们一起工作。 当我使用ASP.MVC和IIS时,服务器始终处于开启状态,所以我只是设置了这个场景(在数据库中插入虚拟GUFF),然后创build一个HttpRequest并将其发送到服务器,并断言我找回了我期望的。

然而,在nodejs中有一些挑战,因为应用程序需要通过命令行或其他机制运行,所以鉴于我有一个app.js将开始聆听,有没有什么办法可以自动启动运行我的testing,然后closures它,一旦我的testing完成?

我目前正在使用与摩卡Yadda我的testing,所以我可以保持它写在一个BDD风格的方式,但我希望Web应用程序的启动是不知道我使用的框架。

只要公开一些方法来启动和停止你的networking服务器。 你的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() } 

然后在你的testing中,你可以做这样的事情(基于摩卡的例子):

 var app = require('../app') before(function(done) { app.start(done) }) after(function(done) { app.close(done) }) 

看看supertest https://github.com/visionmedia/supertest你可以写testing像

 describe('GET /users', function(){ it('respond with json', function(done){ request(app) .get('/user') .set('Accept', 'application/json') .expect('Content-Type', /json/) .expect(200, done); }) })