Thank you again for being here. Jr. Developer here, struggling to write my first tests using jest and supertest.
The error I am getting currently is:
ReferenceError: You are trying to import a file after the Jest environment has been torn down. From src/index.test.js.
Here is my jest test file:
const request = require(‘supertest’)
const app = require(‘./index’)
beforeEach(() => {
jest.useFakeTimers();
});
// // describe("Get /test", () => {
// // //get swagger documentation
// // test("should respond with smily face"), async () => {
// // const response = await (request(app).get("/test"))
// // expect(response.statusCode).toBe(200)
// // }
// // })
it('Testing to see if Jest works', () => {
expect(1).toBe(1)
})
Here is my Index.js
/**
* Required External Modules
*/
const express = require("express");
const cors = require("cors");
const helmet = require("helmet");
const { clientOrigins, serverPort } = require("./config/env.dev");
const { usersRouter } = require("./users/router.js");
const swaggerJsdoc = require('swagger-jsdoc')
const swaggerUi = require('swagger-ui-express')
/**
* App Variables
*/
const app = express();
const apiRouter = express.Router();
/**
* App Configuration
*/
app.use(helmet());
app.use(cors({ origin: clientOrigins }));
app.use(express.json());
app.use("/api", apiRouter);
apiRouter.use("/users", usersRouter);
app.use((error, req, res, next) => {
res.status(error.status || 500).send({
error: {
status: error.status || 500,
message: error.message || 'Internal Server Error',
},
});
});
/**
* Test methods
*/
app.get('/test', (req, res) => {
res.status(200).send("✋")
})
/**
* Server Activation
*/
app.listen(serverPort, () =>
console.log(`API Server listening on port ${serverPort}`)
);
/**
* Swagger
*/
const swaggerOptions = {
definition: {
openapi: "3.0.0",
info: {
title: "Health Administrator API",
version: "0.1.0",
description:
"This is a simple CRUD API application made with Express and documented with Swagger",
license: {
name: "MIT",
url: "https://spdx.org/licenses/MIT.html",
},
contact: {
name: "Health Dev Team",
url: "Health",
email: "faisal@health",
email: "dave@health",
},
},
servers: [
{
url: "http://localhost:6060/",
description: "Development server"
},
],
},
apis: ["src/users/router.js"],
};
const swaggerSpec = swaggerJsdoc(swaggerOptions);
apiRouter.use('/users-docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec));
module.exports = {
app
}
Here are some examples from my route.js of code that I would like to test eventually. The problem is.. even the basic test for the simple app.get I wrote is giving me an error :/
let querySQL = (query, res) => {
try {
connection.execute(
query,
function(err, users, fields) {
res.status(200).json(users)
}
)
} catch (err) {
res.json({message:err});
}
}
addRAHeader = function (req, res, next) {
let count = 0
connection.query(getCount, (err, rows) => {
if(err) throw err
count = Object.values(...rows)
res.header('Access-Control-Expose-Headers', 'Content-Range')
res.header('Content-Range', `users 0-24/${count[0]}`)
});
next()
}
usersRouter.get("/", addRAHeader, checkJwt, async (req, res) => {
setTimeout(() => {
const { sort, range, filter } = req.query
if (filter || range || sort !== undefined) {
parsedFilter = JSON.parse(filter).q
parsedRange = JSON.parse(range)
lowerRange = parsedRange[0]
upperRange = parsedRange[1] + 1
parsedSort = JSON.parse(sort)
querySQL(queryBuilder(`${parsedSort[0]} ${parsedSort[1]}`, `${parsedRange[0]},${(upperRange - lowerRange)}`, parsedFilter), res)
} else {
querySQL(getUsers, res)
}
}, 1000)
});
I know it’s quite a long post. I tried to give as much relevant information as possible. Thank you in advance for anyone who might be able to take a look.