【问题标题】:Jest tests hanging even after running server.close() on my express app即使在我的快速应用程序上运行 server.close() 后,Jest 测试也会挂起
【发布时间】:2019-01-21 20:21:56
【问题描述】:

我有一个快速应用程序,我需要从我的集成测试用例开始。

express 应用被导出到app.js 文件中不监听任何端口。所以,我的测试用例是这样的:

const app = require('../src/app');

describe('Pact Verification', () => {
  const port = 3002;
  let server;

  beforeAll(done => {
    const server = http.createServer(app);
    server.listen({ port }, done)
  });

  afterAll(done => {
    server.close(done);
  });

  it(....

问题是,一旦使用Jest 运行测试,它就会挂起。我必须--forceExit^C 才能退出。

我什至更新到 Jest 23 以使用 --detectOpenHandles,但我在终端中看不到任何输出,它一直挂起,所以这也无济于事。

由于导出的app没有监听任何端口,并且没有任何数据库连接之类的,所以问题不大可能存在,也许它在我的beforeAll/afterAll 块中。我错过了什么?

更新 1

这是我app.js的内容

var express = require('express');
var path = require('path');
var logger = require('morgan');

var indexRouter = require('./routes/index');

var app = express();

if (process.env.NODE_ENV !== 'test') {
  app.use(logger('dev'));
}
app.use(express.json());

app.use('/api/v1/', indexRouter); // <-- these endpoints just return faker data in JSON format (https://github.com/marak/Faker.js/)

app.use((req, res, next) => {
  const err = Error('Not Found');
  err.status = 404;
  next(err);
});

app.use((err, req, res, next) => {
  const { status, message } = err;

  const stack = status !== 404 && err.stack || undefined;

  res.status(status || 500)
    .json({
      message,
      stack,
    });
});

module.exports = app;

【问题讨论】:

  • 如果不查看您的 ../src/app 文件的样子,很难提供帮助。
  • 基本的快递骨架,我先贴一下,等一下
  • @VtoCorleone 你去吧

标签: node.js express jestjs


【解决方案1】:

问题在于serverafterAll 中是undefined,因为它在另一个作用域中分配为const server = http.createServer(app)。相反,它应该是:

server = http.createServer(app);

应该有一个例外,所以done 永远不会在afterAll 中被调用。目前 Jest 抑制来自 afterAll 的错误,有 Jest open issue 解决了 afterAll 错误。

【讨论】:

  • 我不敢相信我没有看到这个。好收获!
猜你喜欢
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2020-05-22
  • 2020-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多