Supertest定制节点中的服务器

请温柔一下。 我是新来的asynchronous编码,并已被抛入一个密集的项目,使用节点开发和API服务器。 我很喜欢它,但有些事情不是自然而然的。

我们的项目是使用express js构build的。 我们有一个文件server.js,在这里我们实例化一个express服务器,然后实例化我们的路由器等等。 我需要现在(部分)完整的服务器进行集成testing。 通常我从命令行运行“%node server.js”,然后使用python请求或curl make请求并检查响应。

现在我已经负责编写一个单元和集成testing套件,以便我们可以自动进行testing。 我一直在使用摩卡,现在正在尝试使用超级集成进行集成testing。 问题是supertest需要一个服务器对象,然后它将应用testing,然而我们的文件,build立我们的服务器对象不会返回任何东西。 我不想修改该文件,所以我难以理解如何访问用于testing的服务器对象。

我的服务器文件看起来(部分)如下所示:

var express = require('express') var app = express(); // Express Configuration app.use(express.favicon()); //handles favicon request, which keeps it out of the log when using a browser :) app.use(express.bodyParser()); //slurps up the body in chunks the node.js way :) // ...and so on 

和我的摩卡testing文件看起来像这样

 var request = require('supertest') , app = require('../server.js') , assert = require("assert"); describe('POST /', function(){ it('should fail bad img_uri', function(done){ request(app) .post('/') .send({ 'img_uri' : 'foobar' }) .expect(500) .end(function(err, res){ console.dir(err) console.dir(res) done(); }) }) }) 

当我运行这个testing时,我得到了关于没有名为地址的方法的应用程序对象的投诉。 我的问题是,有没有办法可以要求/调用server.js文件,以便应用程序对象将在范围内? 或者我正在讨论这个错误。 我也玩过一些使用http.js直接调用服务器,但也没有这样的运气。 谢谢!

您需要导出server.jsapp对象:

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