当我运行mocha测试时,我总是得到错误:连接ECONNREFUSED

Top*_*cus 20 javascript unit-testing mocha.js express

我正在尝试使用mocha和supertest运行我的应用程序测试,但我总是得到错误:连接ECONNREFUSED.

app.js代码:

var express = require('express'),
  mongoose = require('mongoose'),
  fs = require('fs'),
  config = require('./config/config');

mongoose.connect(config.db);
var db = mongoose.connection;
db.on('error', function () {
  throw new Error('unable to connect to database at ' + config.db);
});

var modelsPath = __dirname + '/app/models';
fs.readdirSync(modelsPath).forEach(function (file) {
  if (file.indexOf('.js') >= 0) {
    require(modelsPath + '/' + file);
  }
});

var app = express();

require('./config/express')(app, config);
require('./config/routes')(app);

app.listen(config.port);

exports.app = app;
console.log('LISTEN ON http://localhost:3000/')
Run Code Online (Sandbox Code Playgroud)

test.js代码:

var should = require('should'); 
var assert = require('assert');
var request = require('supertest');
var mongoose = require('mongoose');
var app = require('../../../app').app;

describe('Categories', function() {
    it('- POST is testing', function(done) {
        request(app)
        .post('http://localhost:3000/categories')
        .send({title:'test', text:'test'})
        .end(function(e, res) {
            console.log(e, res);
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

测试输出:

LISTEN ON http://localhost:3000/


  Categories
{ [Error: connect ECONNREFUSED]
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect' } undefined
    1) - POST is testing


  0 passing (2s)
  1 failing

Done, but with warnings.
Run Code Online (Sandbox Code Playgroud)

你能解释为什么会发生这种情况吗?

先感谢您!

Topicus

Top*_*cus 36

问题是路径.用这个"/ categories"替换"localhost:3000/categories"一切正常.

工作范例:

describe('Categories', function() {
    it('- POST is testing', function(done) {
        request(app)
        .post('/categories')
        .send({title:'test', text:'test'})
        .end(function(e, res) {
            console.log(e, res);
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

  • 花了一个小时!我在路径的开头没有正斜线 (2认同)
  • @landrykapela同样的事情发生在我身上。我有5个测试用例,有4个正在工作,有1个连接ECONNREFUSED 127.0.0.1:80失败。我花了两天的时间才意识到所有其他四个测试用例都以正斜杠作为开始路径的前缀,而对于失败的情况,我忘记了前缀。 (2认同)

Mah*_*man 6

我遇到了同样的问题,发现问题是-仅路径URL。路径应采用这种方式-

.post('/categories')
Run Code Online (Sandbox Code Playgroud)