server.close不是一个函数



我有一个开玩笑的超级测试设置,我试图在测试完成后关闭服务器,但它抛出错误,它说server.close()不是一个函数。 这里出了什么问题? 是快递还是开玩笑或超级测试的问题,我无法弄清楚我是测试新手,请帮助我。

服务器.js文件:

const next = require("next");
const express = require("express");
const winston = require("winston");
const config = require("config");
const passport = require("passport");
const flash = require("connect-flash");
const path = require("path");
var cookieSession = require("cookie-session");
const cookieParser = require("cookie-parser");
var app = express();
const dev = process.env.NODE_ENV !== "production";
const nextApp = next({dev});
const port = process.env.PORT || config.get("port");
const handleRequest = nextApp.getRequestHandler();
nextApp.prepare().then(() => {
  require("./server/startup/cors")(app);
  require("./server/startup/db")();
  app.use(cookieParser("ilovescotchscotchyscotchscotch"));
  app.use(express.json());
  app.use(
    cookieSession({
      name: "MyAppName",
      keys: ["very secret key"],
      maxAge: 30 * 24 * 60 * 60 * 1000, // 30 days
    })
  );
  app.use(passport.initialize());
  app.use(passport.session());
  app.use(flash());
  require("./server/services/passport")(passport);
  require("./server/startup/logging")();
  require("./server/startup/routes")(app);
  require("./server/startup/prod")(app);
  app.get("*", (req, res) => {
    return handleRequest(req, res);
  });
});
app.listen(port, () => console.log(`Listening at port ${port}`));
module.exports = app;

这是我的测试文件:

const request = require("supertest");
const {User} = require("./../../server/models/user");
const mongoose = require("mongoose");
let server;
beforeEach(() => {
  server = require("./../../server");
});
afterEach(async () => {
  await server.close();
});
describe("POST /api/signup", () => {
  it("should signin successfully", () => {});
});

这是我的错误:

TypeError: server.close is not a function
       9 | beforeEach(() => { server = require('./../../server'); });
      10 |   afterEach(async () => {    > 11 |     await server.close();
         |                  ^
      12 |
      13 |   });

这是怎么回事?我在这里做错了什么根本性的事情吗?

为了关闭服务器,您必须获取从listen函数返回的实例。在您的示例中,您似乎在此处调用该函数:

app.listen(port, () => console.log(`Listening at port ${port}`));

因此,您需要返回实例并关闭它。 例如

let appServer = app.listen(port, () => console.log(`Listening at port ${port}`));
...
appServer.close()

在索引.js的末尾,您要导出侦听器,而不是应用程序,因此...

app.listen(port, () => console.log(`Listening at port ${port}`));
module.exports = app;

成为。。。

const server = app.listen(port, () => console.log(`Listening at port ${port}`));
module.exports = server;

应该从那里工作。

最新更新