У меня есть экспресс-приложение с несколькими конечными точками, и в настоящее время я тестирую его, используя mocha, chai и chai-http.Это работало нормально, пока я не добавил логику для соединения с пулом Монго и не начал создавать конечные точки, которые зависели от соединения с БД.По сути, прежде чем импортировать свои маршруты API и запустить приложение, я хочу убедиться, что я подключен к Монго.
Моя проблема в том, что у меня возникают проблемы с пониманием того, как я могу экспортировать свое приложение для chai-http, но также проверяю, есть ли соединение с БД перед тестированием любых конечных точек.
Здесь ясоединяясь с Монго, затем с помощью обратного вызова применяю мой API и запускаю приложение.Проблема этого примера в том, что мои тесты начнутся до того, как будет установлено соединение с базой данных, и до того, как будут определены какие-либо конечные точки.Я мог бы переместить app.listen
и api(app)
за пределы обратного вызова MongoPool.connect()
, но у меня все еще остается проблема отсутствия соединения с БД во время выполнения тестов, поэтому мои конечные точки не пройдут.
server.js
import express from 'express';
import api from './api';
import MongoPool from './lib/MongoPool';
let app = express();
let port = process.env.PORT || 3000;
MongoPool.connect((err, success) => {
if (err) throw err;
if (success) {
console.log("Connected to db.")
// apply express router endpoints to app
api(app);
app.listen(port, () => {
console.log(`App listening on port ${port}`);
})
} else {
throw "Couldnt connect to db";
}
})
export default app;
Как я могу проверить свои конечные точки, используя chai-http, при этом убедившись, что перед пуском тестов есть пул соединения?Мне кажется грязным писать мое приложение так, чтобы оно соответствовало тестам, которые я использую.Это проблема проектирования с моей реализацией пула?Есть ли лучший способ проверить мои конечные точки с помощью chai-http?
Вот тест, который я запускаю
test.js
let chai = require('chai');
let chaiHttp = require('chai-http');
let server = require('../server').default;;
let should = chai.should();
chai.use(chaiHttp);
//Our parent block
describe('Forecast', () => {
/*
* Test the /GET route
*/
describe('/GET forecast', () => {
it('it should GET the forecast', (done) => {
chai.request(server)
.get('/api/forecast?type=grid&lat=39.2667&long=-81.5615')
.end((err, res) => {
res.should.have.status(200);
done();
});
});
});
});
И это конечная точка, которую я тестирую
/ api / forecast.js
import express from 'express';
import MongoPool from '../lib/MongoPool';
let router = express.Router();
let db = MongoPool.db();
router.get('/forecast', (req, res) => {
// do something with DB here
})
export default router;
Спасибо за любую помощь