mocha测试失败,出现“MongoError:服务器套接字已关闭”

时间:2017-02-13 07:51:31

标签: node.js mongodb mocha

我的mocha测试失败了:

  

MongoError:服务器XXXX套接字已关闭

我有一个解决方法如何修复它们:

const https = require('https');
const server = https.createServer(..);

close() {
        mongoose.disconnect(); // <-------- I will comment this line
        this.server.close();
    };

我会注释掉mongoose.disconnect();行,我的测试套件开始工作。我也想在测试后清理一下。我的每个测试文件都重新创建服务器并从头开始。似乎出现错误是因为在下一个测试文件执行之前需要进行一些“等待”。

如何更正此错误?

1 个答案:

答案 0 :(得分:1)

解决方案 - 胡克船长救援!

如果我理解正确,您希望在测试后启动并清理服务器。在每次测试之前和之后,您还需要执行一系列重复性任务。

Mocha为您提供完美的解决方案:向胡克先生问好!

captain_hook

Mocha挂钩是您可以在所有测试之前,所有测试之后,或每次测试之前以及每次测试之后运行的函数:

文档非常完整,我确实推荐它。不过我是你的情况,因为你正在处理数据库,你可能会处理async钩子。

听起来很复杂?别担心!

这是正常sync挂钩的工作原理:

describe('hooks', function() {

  before(function() {
    // runs before all tests in this block
  });

  after(function() {
    // runs after all tests in this block
  });

  beforeEach(function() {
    // runs before each test in this block
  });

  afterEach(function() {
    // runs after each test in this block
  });

  //tests
  it("This is a test", () => {
      assert.equal(1, 1);
  });

});

async个钩子只有一个区别:它们有一个参数done,一旦你的任务完成就会被调用。让我们假设我们正在设置一个需要1.5秒才能完成安装的数据库。我们希望在所有测试之前完成此操作,我们只想做一次。

我们假设这是我们的DB中的listen函数:

const listen = callback => {
    setTimeout(callback, 1500);
};

因此,在1.5秒后,它会调用回调函数,表明它已做好准备采取行动。

现在让我们看看如何制作async钩子:

describe('hooks', function() {

  let myDB;
  before( done => {
      myDB = newDB();
      myDB(done);
  });

  //tests
});

就是这样!希望它有所帮助!