express - server.close 不是一个函数

标签 express jestjs supertest

我有一个用于测试的 jest supertest 设置,我试图在测试完成后关闭服务器,但它抛出错误,它说 server.close() 不是一个函数。这里有什么问题?是 express 还是 jest 还是 supertest 的问题我无法弄清楚我是测试新手,请帮助我。
server.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()

关于express - server.close 不是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54018820/

相关文章:

javascript - EJS中的求和过程

javascript - Jest - 未导出的模拟函数

javascript - 在浅层渲染的功能组件上调用 instance() 返回 null

node.js - Mocha 路由测试不异步执行

node.js - 如何在node.js中的compoundjs应用程序中模拟 session 对象

node.js - Node.js Express 中的异步代码

node.js - 如何使用express-validator在nodejs中的每个输入类型字段上显示错误消息

javascript - 刷新页面显示找不到文件错误如何使用 [angular js + NodeJS/ExpressJS] 解决

node.js - 'FIRESTORE 内部断言失败 : Unexpected state' when unit testing with Jest

node.js - 如何正确地对 Joi Schemas 验证进行单元测试?