question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Usage with jest globalSetup and globalTeardown

See original GitHub issue

Awesome module!

We’re running fine with the current implementation, however, one small sticking point is that we have to perform a new connection and disconnection within every jest block. It would be awesome if we were able to use a globalSetup and globalTeardown to connect/disconnect our client (mongoose) to the database once.

Unfortunately, when I do this, the process.env.MONGO_URL is undefined:

module.exports = async function globalSetup() {
  await mongoose.connect(process.env.MONGO_URL, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    useCreateIndex: true,
    useFindAndModify: false,
  });
};

I suspect this is because the setup and teardown might run before the preset? Any thoughts as to a way around this limitation?

Issue Analytics

  • State:open
  • Created 3 years ago
  • Reactions:3
  • Comments:6

github_iconTop GitHub Comments

7reactions
chancedcommented, Jul 9, 2020

Yea. You should be able to, I believe. mongoSetup is just the variable name I assigned to require'@shelf/jest-mongodb/setup') which is the default export of https://github.com/shelfio/jest-mongodb/blob/master/setup.js#L10

Given your initial function, it would look like:


const mongoSetup = require('@shelf/jest-mongodb/setup'); 

module.exports = async function globalSetup() {
  await mongoSetup();
  // process.env.MONGO_URL is now set by
  // https://github.com/shelfio/jest-mongodb/blob/fcda766bfa433644a7383993467ccaa06dfea28b/setup.js#L26
  await mongoose.connect(process.env.MONGO_URL, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    useCreateIndex: true,
    useFindAndModify: false,
  });
};
6reactions
RashiqAzhancommented, Jan 26, 2022

I did as follows, but I am having trouble connecting to the database from my test files.

Here are the relevant files with their code. jest.setup.js

import mongoose from "mongoose";

const mongoSetup = require("@shelf/jest-mongodb/setup");

module.exports = async () => {
  await mongoSetup();

  global.__DB__await = mongoose
    .connect(process.env.MONGO_URL, {
      useNewUrlParser: true,
      useCreateIndex: true,
      useUnifiedTopology: true,
      useFindAndModify: false,
    })
    .then(null, (err) => {
      console.log(
        `In-memory mongodb instance failed to initialize. Error: ${err}`
      );
    });
};

jest.teadown.js

import mongoose from "mongoose";

module.exports = async () => {
  await mongoose.connection.close();
};

jest.config.js

module.exports = {
 preset: "@shelf/jest-mongodb",
 globalSetup: "<rootDir>/server/__tests__/__utils__/jest.setup.js",
 globalTeardown: "<rootDir>/server/__tests__/__utils__/jest.teardown.js",
}

None of my tests that require a connection to mongodb to run successfully and pass. Running npm run test -- --detectOpenHandles reveals the following errors.

●  TCPSERVERWRAP

710 |       };
711 |       let response = await request(app)
> 712 |         .post("/api/users")
|          ^
713 |         .send(payload)
714 |         .set("Accept", "application/json");
715 |       expect(response.statusCode).toBe(200);

at Test.serverAddress (node_modules/supertest/lib/test.js:48:35)
at new Test (node_modules/supertest/lib/test.js:34:14)
at Object.post (node_modules/supertest/index.js:28:14)
at server/__tests__/controllers/user.controller.test.js:712:10

All tests exit with TCPSERVERWRAP. npm run test is test: "jest" in the package.json file.

I have tried the block of async code in the jest.setup.js and jest.teadown.js files in a beforeAll() and afterAll() embedded into each the test files and it works. All tests pass when the db connection originates from the test files themselves.

Any guidance is highly appreciated.

Read more comments on GitHub >

github_iconTop Results From Across the Web

Getting Jest global setup and global teardown to work in a ...
I want to run a function that opens db connection before running tests (global setup) and another function that closes ...
Read more >
Configuring Jest
You can use --config flag to pass an explicit path to the file. ... globals [object]; globalSetup [string]; globalTeardown [string] ...
Read more >
jest-pg - npm Package Health Analysis - Snyk
... for each test and delete the database after test using jest globalSetup/globalTeardown. For more information about how to use this package see...
Read more >
Integration with Test Runners | mongodb-memory-server
For usage with jest it is recommended to use the globalSetup and globalTeardown options. config.ts : // this file could be anything (like...
Read more >
Using with puppeteer - Jest - w3resource
With the Async Test Environment and Global Setup/Teardown APIs, Jest ... each of the Test Environment; use Global Teardown to close puppeter.
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found