【问题标题】:Supertest custom express server in node节点中的超测自定义快递服务器
【发布时间】:2012-08-09 06:18:27
【问题描述】:

请对我温柔一点。我是异步编码的新手,一头扎进了一个使用节点开发和 API 服务器的密集项目。我很喜欢它,但有些事情不是自然而然的。

我们的项目是使用 express js 构建的。我们有一个文件 server.js,我们在其中实例化了一个快速服务器,该服务器又实例化了我们的路由器等等。我现在需要对这个(部分)完整的服务器进行集成测试。通常我所做的是从命令行运行“%node server.js”,然后使用 python 请求或 curl 发出请求并检查响应。

现在,我的任务是编写一个单元和集成测试套件,以便我们可以自动进行测试。我一直在使用 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

我的 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();
        })  
  })    
})

当我运行这个测试时,我收到一个关于应用程序对象没有名为地址的方法的投诉。我的问题是,有没有一种方法可以要求/调用 server.js 文件,以便 app 对象在范围内?还是我要解决这个问题。我也尝试过使用 http.js 直接调用服务器,但也没有运气。谢谢!

【问题讨论】:

  • 运行时我得到的错误是:“TypeError: Object # has no method 'address'”并且堆栈跟踪引用了我的测试文件中的行:“request(app)”

标签: javascript unit-testing node.js mocha.js


【解决方案1】:

需要在server.js中导出app对象:

var app = express();

module.exports = app;

...

【讨论】:

  • 完美!这正是我所需要的。
  • Express默认导出app,但是supertest还是报找不到address方法。以后版本的 express 可能有问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-10
  • 2016-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多