[英]Jest tests hanging even after running server.close() on my express app
我有一個快速的應用程序,我需要從我的集成測試用例開始。
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
塊中。 我錯過了什么?
這是我的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;
問題是afterAll
中的server
undefined
,因為它在另一個作用域中被指定為const server = http.createServer(app)
。 相反,它應該是:
server = http.createServer(app);
應該有一個例外,所以done
永遠不會得到所謂的afterAll
。 目前Jest會從afterAll
抑制錯誤,有Jest 打開的問題可以解決afterAll
bug。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.