节点中的Supertest自定义快速服务器

akr*_*ymn 31 javascript unit-testing mocha.js node.js

请温柔地对待我.我是异步编码的新手,并且已经开始使用节点开发和API服务器进入密集型项目.我喜欢它,但有些事情并不是自然而然的.

我们的项目是使用express js构建的.我们有一个文件server.js,我们实例化一个快速服务器,然后实例化我们的路由器,依此类推.我需要对现在(部分)完整的服务器进行集成测试.通常我所做的是从命令行运行'%node server.js',然后使用python请求或curl make requests并检查响应.

现在我的任务是编写一个单元和集成测试套件,以便我们可以自动化我们的测试.我一直在使用mocha,现在我正在尝试使用supertest进行集成测试.问题是supertest需要一个服务器对象然后应用测试,但是构建我们的服务器对象的文件不会返回任何内容.我不想修改该文件,因此我对如何访问用于测试的服务器对象感到困惑.

我的服务器文件看起来(部分)像这样:

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
Run Code Online (Sandbox Code Playgroud)

我的mocha测试文件看起来像这样

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();
        })  
  })    
})
Run Code Online (Sandbox Code Playgroud)

当我运行此测试时,我收到有关app对象没有名为address的方法的投诉.我的问题是,有没有办法我可以要求/调用server.js文件,以便app对象在范围内?或者我错了.我也使用http.js直接调用服务器,但也没有运气.谢谢!

sct*_*lsn 77

您需要导出app对象server.js:

var app = express();

module.exports = app;

...
Run Code Online (Sandbox Code Playgroud)