【问题标题】:Connection Refused error when Mongo is connected to applicationMongo连接到应用程序时连接被拒绝错误
【发布时间】:2019-05-27 15:57:23
【问题描述】:

我正在用 Mocha 编写一些测试,我的第一个测试总是通过:

const assert = require('assert');
const request = require('supertest');
const app = require('../app');

describe('The express app', () => {
  it('handles a GET request to /api', done => {
    request(app)
      .get('/api')
      .end((err, response) => {
        assert(response.body.hi === 'there');
        done();
      });
  });
});

但是这第二个测试从一开始就总是失败:

const assert = require("assert");
const request = require("supertest");
const mongoose = require("mongoose");
const app = require("../../app");

const Driver = mongoose.model("driver");

describe("Drivers controller", () => {
  it("Post to /api/drivers create a new driver", () => {
    let oldCount;
    return Driver.count()
      .then(count => {
        oldCount = count;
        return new Promise((resolve, reject) => {
          request(app)
            .post("api/drivers")
            .send({ email: "test@test.com" })
            .end((err, res) => {
              if (err) {
                reject(err);
              } else {
                resolve(res);
              }
            });
        });
      })
      .then(() => {
        return Driver.count();
      })
      .then(newCount => {
        assert(oldCount + 1 === newCount);
      });
  });
});

以上是它的第三次重构,我正在测试这个控制器:

const Driver = require("../models/driver");

module.exports = {
  greeting(req, res) {
    res.send({ hi: "there" });
  },

  create(req, res) {
    console.log(req.body);
    const driverProps = req.body;

    Driver.create(driverProps).then(driver => res.send(driver));
  }
};

通过原始重构,我得到assert(oldCount + 1 === newCount); 返回falsy 而不是truthy,这是意料之外的,并且通过我的测试重构我得到一个连接被拒绝,但数据库已连接我检查过这个配置:

const express = require("express");
const bodyParser = require("body-parser");
const mongoose = require("mongoose");
const routes = require("./routes/routes");
const app = express();

mongoose.Promise = global.Promise;
mongoose.connect("mongodb://localhost/muber", { useMongoClient: true });

const connection = mongoose.connection;

connection.on("connected", function() {
  console.log("connected to db");
});

app.use(bodyParser.json());
routes(app);

module.exports = app;

结果:

[nodemon] 开始mocha --recursive -R min 连接到db

1 次通过 (43ms) 1 次失败

1) Drivers 控制器 Post 到 /api/drivers 创建一个新的驱动程序: 错误:ECONNREFUSED:连接被拒绝 在 Test.assert (node_modules/supertest/lib/test.js:164:13) 在 Server.assert (node_modules/supertest/lib/test.js:131:12) 在 emitCloseNT (net.js:1600:8) 在 processTicksAndRejections (internal/process/next_tick.js:76:17)

[nodemon] 应用程序崩溃 - 启动前等待文件更改...

不知道发生了什么。

【问题讨论】:

    标签: mongodb express mongoose mocha.js body-parser


    【解决方案1】:

    天哪,我不得不停止测试并停止 mongo 数据库服务器并重新启动它,然后运行测试,一切正常并按预期工作:

      connected to db
    { email: 'test@test.com' }
    
      2 passing (132ms)
    
    [nodemon] clean exit - waiting for changes before restart
    

    重构实际上是没有必要的,但当我把它放回原处时,我确实对其进行了一些调整:

    describe("Drivers controller", () => {
      it("Post to /api/drivers create a new driver", done => {
        Driver.count().then(count => {
          request(app)
            .post("/api/drivers")
            .send({ email: "test@test.com" })
            .set("Accept", "application/json")
            .expect("Content-Type", /json/)
            .expect(200)
            .end(() => {
              Driver.count().then(newCount => {
                assert(count + 1 === newCount);
                done();
              });
            });
        });
      });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 2018-03-18
      • 1970-01-01
      • 1970-01-01
      • 2021-03-29
      • 1970-01-01
      • 2015-12-21
      相关资源
      最近更新 更多