我正在尝试为使用 postresql 的 heroku 应用程序编写测试,但看起来我的测试函数无法连接到数据库。端点本身工作正常,当我在浏览器上测试它时,我会收到来自服务器的响应。提前致谢!!
我的代码:
server.js
import express from 'express';
import bodyParser from 'body-parser';
import cors from 'cors';
import mountRouter from './routes/index.js';
const port = 7000;
const app = express();
app.use(express.json());
app.use(bodyParser.urlencoded({ extended: true}));
app.use(cors());
mountRouter(app);
app.get('/', (req, res) => {
res.send("Welcome. The connection has been established.");
});
app.get('/test', (req, res) => {
res.send("Test passed.");
});
app.listen(process.env.PORT || port, () => {
console.log(`Server listening`)
})
export default app;
index.js
import patientsRouter from './patients.js';
import staffMembersRouter from './staffMembers.js';
import hospitalWardsRouter from './hospitalWards.js';
import authenticationRouter from './authentication.js';
const mountRouter = app => {
app.use('/patients', patientsRouter)
app.use('/staff', staffMembersRouter)
app.use('/wards', hospitalWardsRouter)
app.use('/authentication', authenticationRouter)
}
export default mountRouter;
hospitalWardsController.js
import pool from '../db/db.js';
import sqlTemplate from 'sql-template-strings';
const { SQL } = sqlTemplate;
class HospitalWardsController {
getAllHospitalWards = async (req, res) => {
try {
const allHospitalWards = await pool.query(SQL`
SELECT * FROM hospital_ward;
`);
res.status(200).json(allHospitalWards.rows);
} catch (err) {
console.log(err.message);
}
}
getFreeBedsCount = async (req, res) => {
try {
const { hospital_ward } = req.body;
const freeBedsCount = await pool.query(SQL`
SELECT hospital.name AS hospital_name, hospital.location AS hospital_location, hospital_ward.name AS hospital_ward_name, (bed_quantity - bed_reserved) AS beds_free
FROM hospital_ward
INNER JOIN hospital
ON hospital_ward.hospital_id = hospital.id
WHERE hospital_ward.name = ${hospital_ward}
ORDER BY beds_free DESC;
`);
res.status(200).json(freeBedsCount.rows);
} catch (err) {
console.log(err.message);
}
}
}
const hospitalWardsController = new HospitalWardsController();
export default hospitalWardsController;
wards.test.js
import request from 'supertest';
import hospitalWardsController from '../routes/hospitalWards.js';
import app from '../server.js';
describe("hospitalWards.js TESTS", () => {
describe("hospitalWards.js GET('/') method TEST", () => {
test("should return all hospital wards", async () => {
app.listen();
const response = await request(hospitalWardsController).get("/").send({});
expect(response.statusCode).toBe(200);
});
});
});