Я пишу тест для маршрута, который сохраняет объект в mongodb.Маршрут работает нормально при использовании почтальона, но не запускается при запуске http-теста chai.
Выдается либо ошибка:
Ошибка: прочитайте ECONNRESET
Или иногда:
Ошибка: сокет зависает.
Я не понимаю, что делаю неправильно, я был бы очень признателен, если бы кто-то мог мне помочь или указать мнепо направлению.Cheers
Файл сервера:
const express = require('express');
const database = require('./controller/databaseController');
const router = require('./routes/router');
const bodyParser = require('body-parser');
const app = express();
const port = 3000;
app.use(bodyParser.json());
app.use("/", router);
database.connect();
app.listen(port, () => {
console.log( "serveur launched, listening on port " + port );
console.log("environment : " + app.settings.env);
});
//export app for testing purpose
module.exports = app;
Код маршрута:
router.post('/savePharmacie', (req, res) => {
var pharmacie = new PharmacieModel(req.body);
pharmacie.save((err, doc) => {
if(err){
res.writeHead(500, {"Content-Type": "application/json"});
res.json(err);
res.end();
}else{
res.writeHead(200, {"Content-Type": "application/json"});
res.json(doc);
res.end();
}
});
});
Тестовый код:
describe('save to database', () => {
it('save one to database', (done) => {
chai.request(app)
.post('saveData/savePharmacie')
.send(pharmacieMockup)
.end((err, resp, body) => {
if(err){
console.log("error : " + err);
done(err);
}else{
var response = res.body;
console.log("response : " + response);
var expected = [pharmacieMockup];
response.should.be.a('array');
expect(response[0]).to.deep.include(expected[0]);
done();
}
});
});
after((done) => {
PharmacieModel.deleteMany({});
done();
});
});
Объект pharmacieMockup
являетсяфиктивный объект json, который следует схеме mongoose.
app
объект ссылается на экземпляр экспресс-сервера.
Протестированный маршрут ('saveData / savePharmacie') описан в верхнем (router.post).