У меня есть экспресс-приложение (REST API), которое подключается к кластеру mongoDB в MongoDB Atlas (облачная база данных) во время тестов. Я использую Мокко для тестирования.
У меня есть сквозной тест (который использует базу данных), но для большинства тестов я хочу смоделировать / заглушить вызовы к базе данных, чтобы она была изолированной.
Я пытался использовать nock для перехвата сетевых подключений и проверки ответа, но из того, что я вижу, nock только для вызовов http
, а mongoDB Atlas использует DNS (начинается с mongodb+srv:
, см. здесь для получения дополнительной информации) и я думаю, именно поэтому я не могу заставить это работать.
Я также пытаюсь заглушить Модель. Я изо всех сил пытаюсь заставить это работать, но кажется, что это могло бы быть выбором?
// The route
router.post('/test', async (req, res) => {
const { name } = req.body;
const example = new ExampleModel({ name: name})
// this should be mocked
await example.save();
res.status(200);
});
// The test
describe('POST /example', () => {
it('Creates an example', async () => {
// using supertest to make http call to my API app
const response = await request(app)
.post('/test')
.type("json")
.send({ 'name': 'test-name' })
// expect the model to have been created and then saved to the database
});
});
Я ожидаю, что при запуске теста он выполнит POST для API, который не сделает вызов базы данных, но вернет поддельные данные (как если бы это было) .