jestjs / jest

Delightful JavaScript Testing.
https://jestjs.io
MIT License
44.09k stars 6.44k forks source link

[Bug]: ReferenceError: You are trying to `import` a file after the Jest environment has been torn down #14348

Closed 12testgl closed 1 year ago

12testgl commented 1 year ago

Version

29.6.1

Steps to reproduce

App.js

const express = require('express'); const path = require('path'); const helmet = require('helmet'); const cookieParser = require('cookie-parser'); const xss = require('xss-clean'); const compression = require('compression'); const cors = require('cors'); const passport = require('passport'); const useragent = require('express-useragent'); const session = require('express-session'); const bodyParser = require('body-parser'); const httpStatus = require('http-status'); const config = require('./config/config'); const i18n = require('./config/i18n'); const morgan = require('./config/morgan'); const sequelize = require('./config/sequelize'); const { jwtStrategy } = require('./config/passport'); const passportSaml = require('./config/passportSaml'); const { authLimiter } = require('./middlewares/rateLimiter'); const routes = require('./routes/v1'); const loginRouter = require('./routes/v1/login.route'); const { errorConverter, errorHandler } = require('./middlewares/error'); const ApiError = require('./utils/ApiError');

require('./models/index');

// Require routes const usersRouter = require("./routes/v1/user.route")

const corsOptions = { origin: function (origin, callback) { const isWhitelisted = config.originsWhitelist.split(',').indexOf(origin) !== -1;

// allow requests with no origin (like mobile apps or curl requests)
if (isWhitelisted || !origin || origin === 'null') {
  return callback(null, true);
} else {
  return callback(new Error('Not allowed by CORS'), false);
}

}, };

const app = express();

// view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade');

app.enable('trust proxy');

// set security HTTP headers app.use(helmet());

// parse json request body app.use(express.json());

// parse urlencoded request body app.use(express.urlencoded({ extended: true }));

// sanitize request data app.use(xss());

// gzip compression app.use(compression());

// enable cors // app.use(cors(corsOptions)); app.options('*', cors(corsOptions));

app.use(bodyParser.json({ limit: '100mb' })); app.use(bodyParser.urlencoded({ extended: true, limit: '100mb' }));

app.use(cookieParser()); app.use(i18n.init); app.use(express.static(path.join(__dirname, 'public'))); app.use(useragent.express());

// jwt authentication app.use(passport.initialize()); passport.use('jwt', jwtStrategy);

if (config.env !== 'local') { sequelize.sync(); }

// v1 api routes app.use('/v1', routes);

// send back a 404 error for any unknown api request app.use((req, res, next) => { next(new ApiError(httpStatus.NOT_FOUND, 'Not found')); });

// convert error to ApiError, if needed app.use(errorConverter);

// handle error app.use(errorHandler);

module.exports = app;

docs.test.js

const request = require('supertest'); const httpStatus = require('http-status'); const app = require('../../src/app'); const config = require('../../src/config/config');

describe('Auth routes', () => { describe('GET /v1/docs', () => { test('should return 404 when running in production', async () => { config.env = 'production'; await request(app).get('/v1/docs').send().expect(httpStatus.NOT_FOUND); config.env = process.env.NODE_ENV; }); }); });

Expected behavior

PASS src/tests/docs.test.ts Test the root path √ It should response the GET method (17 ms)

Test Suites: 1 passed, 1 total Tests: 1 passed, 1 total Snapshots: 0 total Time: 1.87 s, estimated 2 s Ran all test suites.

ReferenceError: You are trying to import a file after the Jest environment has been torn down. From tests/integration/docs.test.js.

  at Object.getCodec (node_modules/mysql2/node_modules/iconv-lite/lib/index.js:63:27)
  at Object.getDecoder (node_modules/mysql2/node_modules/iconv-lite/lib/index.js:125:23)
  at Object.<anonymous>.exports.decode (node_modules/mysql2/lib/parsers/string.js:10:25)
  at Packet.readNullTerminatedString (node_modules/mysql2/lib/packets/packet.js:412:25)
  at Function.fromPacket (node_modules/mysql2/lib/packets/handshake.js:62:33)
  at ClientHandshake.handshakeInit (node_modules/mysql2/lib/commands/client_handshake.js:112:40)
  at ClientHandshake.execute (node_modules/mysql2/lib/commands/command.js:45:22)
  at Connection.handlePacket (node_modules/mysql2/lib/connection.js:478:34)
  at PacketParser.onPacket (node_modules/mysql2/lib/connection.js:97:12)
  at PacketParser.executeStart (node_modules/mysql2/lib/packet_parser.js:75:16)
  at Socket.<anonymous> (node_modules/mysql2/lib/connection.js:104:25)

RUNS tests/integration/docs.test.js /Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:102 throw new SequelizeErrors.ConnectionError(err); ^

ConnectionError [SequelizeConnectionError]: Encoding not recognized: 'cesu8' (searched as: 'cesu8') at ConnectionManager.connect (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/sequelize/src/dialects/mysql/connection-manager.js:126:17) at processTicksAndRejections (node:internal/process/task_queues:95:5) at ConnectionManager._connect (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/sequelize/src/dialects/abstract/connection-manager.js:332:24) at /Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/sequelize/src/dialects/abstract/connection-manager.js:250:32 at ConnectionManager.getConnection (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/sequelize/src/dialects/abstract/connection-manager.js:280:7) at /Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/sequelize/src/sequelize.js:638:26 at MySQLQueryInterface.tableExists (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/sequelize/src/dialects/abstract/query-interface.js:242:17) at Function.sync (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/sequelize/src/model.js:1349:21) at Sequelize.sync (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/sequelize/src/sequelize.js:825:9) { parent: Error: Encoding not recognized: 'cesu8' (searched as: 'cesu8') at Object.getCodec (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/node_modules/iconv-lite/lib/index.js:104:23) at Object.getDecoder (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/node_modules/iconv-lite/lib/index.js:125:23) at Object..exports.decode (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/parsers/string.js:10:25) at Packet.readNullTerminatedString (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/packets/packet.js:412:25) at Function.fromPacket (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/packets/handshake.js:62:33) at ClientHandshake.handshakeInit (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/commands/client_handshake.js:112:40) at ClientHandshake.execute (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/commands/command.js:45:22) at Connection.handlePacket (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/connection.js:478:34) at PacketParser.onPacket (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/connection.js:97:12) at PacketParser.executeStart (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/packet_parser.js:75:16) at Socket. (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/connection.js:104:25) at Socket.emit (node:events:513:28) at addChunk (node:internal/streams/readable:324:12) at readableAddChunk (node:internal/streams/readable:297:9) at Socket.Readable.push (node:internal/streams/readable:234:10) at TCP.onStreamRead (node:internal/stream_base_commons:190:23) { fatal: true }, original: Error: Encoding not recognized: 'cesu8' (searched as: 'cesu8') at Object.getCodec (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/node_modules/iconv-lite/lib/index.js:104:23) at Object.getDecoder (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/node_modules/iconv-lite/lib/index.js:125:23) at Object..exports.decode (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/parsers/string.js:10:25) at Packet.readNullTerminatedString (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/packets/packet.js:412:25) at Function.fromPacket (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/packets/handshake.js:62:33) at ClientHandshake.handshakeInit (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/commands/client_handshake.js:112:40) at ClientHandshake.execute (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/commands/command.js:45:22) at Connection.handlePacket (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/connection.js:478:34) at PacketParser.onPacket (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/connection.js:97:12) at PacketParser.executeStart (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/packet_parser.js:75:16) at Socket. (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/connection.js:104:25) at Socket.emit (node:events:513:28) at addChunk (node:internal/streams/readable:324:12) at readableAddChunk (node:internal/streams/readable:297:9) at Socket.Readable.push (node:internal/streams/readable:234:10) at TCP.onStreamRead (node:internal/stream_base_commons:190:23) { fatal: true } }

Actual behavior

ReferenceError: You are trying to import a file after the Jest environment has been torn down. From tests/integration/docs.test.js.

  at Object.getCodec (node_modules/mysql2/node_modules/iconv-lite/lib/index.js:63:27)
  at Object.getDecoder (node_modules/mysql2/node_modules/iconv-lite/lib/index.js:125:23)
  at Object.<anonymous>.exports.decode (node_modules/mysql2/lib/parsers/string.js:10:25)
  at Packet.readNullTerminatedString (node_modules/mysql2/lib/packets/packet.js:412:25)
  at Function.fromPacket (node_modules/mysql2/lib/packets/handshake.js:62:33)
  at ClientHandshake.handshakeInit (node_modules/mysql2/lib/commands/client_handshake.js:112:40)
  at ClientHandshake.execute (node_modules/mysql2/lib/commands/command.js:45:22)
  at Connection.handlePacket (node_modules/mysql2/lib/connection.js:478:34)
  at PacketParser.onPacket (node_modules/mysql2/lib/connection.js:97:12)
  at PacketParser.executeStart (node_modules/mysql2/lib/packet_parser.js:75:16)
  at Socket.<anonymous> (node_modules/mysql2/lib/connection.js:104:25)

RUNS tests/integration/docs.test.js /Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:102 throw new SequelizeErrors.ConnectionError(err); ^

ConnectionError [SequelizeConnectionError]: Encoding not recognized: 'cesu8' (searched as: 'cesu8') at ConnectionManager.connect (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/sequelize/src/dialects/mysql/connection-manager.js:126:17) at processTicksAndRejections (node:internal/process/task_queues:95:5) at ConnectionManager._connect (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/sequelize/src/dialects/abstract/connection-manager.js:332:24) at /Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/sequelize/src/dialects/abstract/connection-manager.js:250:32 at ConnectionManager.getConnection (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/sequelize/src/dialects/abstract/connection-manager.js:280:7) at /Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/sequelize/src/sequelize.js:638:26 at MySQLQueryInterface.tableExists (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/sequelize/src/dialects/abstract/query-interface.js:242:17) at Function.sync (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/sequelize/src/model.js:1349:21) at Sequelize.sync (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/sequelize/src/sequelize.js:825:9) { parent: Error: Encoding not recognized: 'cesu8' (searched as: 'cesu8') at Object.getCodec (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/node_modules/iconv-lite/lib/index.js:104:23) at Object.getDecoder (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/node_modules/iconv-lite/lib/index.js:125:23) at Object..exports.decode (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/parsers/string.js:10:25) at Packet.readNullTerminatedString (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/packets/packet.js:412:25) at Function.fromPacket (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/packets/handshake.js:62:33) at ClientHandshake.handshakeInit (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/commands/client_handshake.js:112:40) at ClientHandshake.execute (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/commands/command.js:45:22) at Connection.handlePacket (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/connection.js:478:34) at PacketParser.onPacket (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/connection.js:97:12) at PacketParser.executeStart (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/packet_parser.js:75:16) at Socket. (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/connection.js:104:25) at Socket.emit (node:events:513:28) at addChunk (node:internal/streams/readable:324:12) at readableAddChunk (node:internal/streams/readable:297:9) at Socket.Readable.push (node:internal/streams/readable:234:10) at TCP.onStreamRead (node:internal/stream_base_commons:190:23) { fatal: true }, original: Error: Encoding not recognized: 'cesu8' (searched as: 'cesu8') at Object.getCodec (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/node_modules/iconv-lite/lib/index.js:104:23) at Object.getDecoder (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/node_modules/iconv-lite/lib/index.js:125:23) at Object..exports.decode (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/parsers/string.js:10:25) at Packet.readNullTerminatedString (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/packets/packet.js:412:25) at Function.fromPacket (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/packets/handshake.js:62:33) at ClientHandshake.handshakeInit (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/commands/client_handshake.js:112:40) at ClientHandshake.execute (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/commands/command.js:45:22) at Connection.handlePacket (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/connection.js:478:34) at PacketParser.onPacket (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/connection.js:97:12) at PacketParser.executeStart (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/packet_parser.js:75:16) at Socket. (/Users/rajpal/Documents/Projects/LSH/lsh-asset-sharing-backend/node_modules/mysql2/lib/connection.js:104:25) at Socket.emit (node:events:513:28) at addChunk (node:internal/streams/readable:324:12) at readableAddChunk (node:internal/streams/readable:297:9) at Socket.Readable.push (node:internal/streams/readable:234:10) at TCP.onStreamRead (node:internal/stream_base_commons:190:23) { fatal: true } }

Additional context

No response

Environment

System:
    OS: MAC 12
  Binaries:
    Node: 18.6.1 
    npm: 9.6.7 
  npmPackages:
    jest: ^29.6.1
github-actions[bot] commented 1 year ago

This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 30 days.

github-actions[bot] commented 1 year ago

This issue was closed because it has been stalled for 30 days with no activity. Please open a new issue if the issue is still relevant, linking to this one.

github-actions[bot] commented 11 months ago

This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs. Please note this issue tracker is not a help forum. We recommend using StackOverflow or our discord channel for questions.