使用MOCHA加载Express应用程序时连接ECONMREFUSED

时间:2014-04-25 17:39:57

标签: node.js express mocha supertest

我正在使用MOCHA测试一些快速框架代码。

我编写了一个简单的MOCHA代码来测试响应头中返回的消息。代码有效。这也意味着我连接到服务器,我可以从数据库中获取文件

现在,我想使用“SuperTest”做同样的事情。但是,我得到“错误:连接ECONMREFUSED”

这是我的代码:

var express = require('express');
var request = require('supertest');

var app = express();

describe('GET /core/dbq/534e930204dd311822ec1c9d', function() {
    this.timeout(15000);
    it ('Check header message', function(done) {
      request(app)
        .get('http://localhost:3001/ecrud/v1/core/dbq/534e930204dd311822ec1c9d')
        .expect('warning', '100 Max Record Limit Exceeded')
        .expect('Content-Type', /json/)
        .expect(200, done);
    } )
} )

并且控制台上显示的错误是:

1) GET /core/dbq/534e930204dd311822ec1c9d Check header message:
   Error: connect ECONNREFUSED
   at errnoException (net.js:901:11)
   at Object.afterConnect [as oncomplete] (net.js:892:19)

我正在学习使用“SuperTest”。请帮忙。谢谢。

1 个答案:

答案 0 :(得分:0)

Supertest在随机端口上启动应用程序,并为您填充URL的主机+端口部分。您的代码应仅提供路径(和查询)部分。

request(app)
    .get('/ecrud/v1/core/dbq/534e930204dd311822ec1c9d')
    // etc.
    .expect(200, done);

或者,您可以在运行测试之前自行启动应用程序。

describe('GET /core/dbq/534e930204dd311822ec1c9d', function() {
  this.timeout(15000);
  before(function(done) {
    app.listen(3001, function() { done(); });
  });

  it ('Check header message', function(done) {
    request(app)
      .get('http://localhost:3001/ecrud/v1/core/dbq/534e930204dd311822ec1c9d')
      // etc.
  });
});

我强烈建议您使用第一种方法,否则您的测试可能会与侦听端口3001的其他应用程序发生冲突。