Express server.close()给出了;“服务器未运行”;在每个摩卡钩子里

Express server.close()给出了;“服务器未运行”;在每个摩卡钩子里,express,mocha.js,Express,Mocha.js,我试图用mocha运行一个测试套件,目标是在每个测试用例之前启动服务器,然后 在每个测试用例之后关闭它 但由于某些原因,当每个案例点燃后,我得到以下错误: 错误[服务器未运行]:服务器未运行 测试用例通过,这意味着服务器已启动并正在运行 我从app.js文件中导出服务器,如下所示: var server = app.listen(3000, function () { var port = server.address().port; console.log("Example

我试图用mocha运行一个测试套件,目标是在每个测试用例之前启动服务器,然后 在每个测试用例之后关闭它

但由于某些原因,当每个案例点燃后,我得到以下错误: 错误[服务器未运行]:服务器未运行

测试用例通过,这意味着服务器已启动并正在运行

我从app.js文件中导出服务器,如下所示:

var server = app.listen(3000, function () {
  var port = server.address().port;
  console.log("Example app listening at port %s", port);
});

module.exports = server; // Export server in order to use it in test files
我的测试文件:

describe("loading express", function () {
  var server;
  before(function (done) {
    User.deleteMany(done);
  });

  beforeEach(function () {
    server = require("../app");
  });
  afterEach(function (done) {
    server.close(done);
  });
  describe("Create user account with valid email address", function () {
    describe("Route: POST /signup", () => {
      it("201 HAPPY PATH", (done) => {
        chai
          .request(server)
          .post("/signup")
          .send({
            email: "test23222@test.test",
            password: "12345678",
            firstname: "testtest",
            lastname: "testtest",
          })
          .end((err, res) => {
            res.should.have.status(201);
            done();
          });
      });
    });
  });
});
我相信我需要出口一个承诺

到目前为止,我得到的是:

var server = new Promise(function (resolve, reject) {
 app.listen(3000, function () {
  var port = server.address().port;
  console.log("Example app listening at port %s", port);
  resolve();
 });
}

module.exports = server; // Export server in order to use it in test files

in test suite:

var server = require('./app.js')

server.then(function() {
 ....
}

为什么您认为
server=await require(“../app”)
会等待服务器启动
async/await
仅适用于承诺。此外,
require
将缓存模块。除非您以某种方式劫持了模块加载算法,否则在每次之前在
内部执行该操作是没有意义的。在复制和复制另一个实验之前,wait/async是一个输入错误,现已删除。好吧,但为什么您仍然希望服务器在您需要它之后立即侦听端口。你的考试可能会提前结束。在继续测试之前,您需要提供一些等待服务器完成“侦听”过程的方法。我遵循了以下指南:但我想我需要在某个地方添加一个承诺。。。