У меня есть тест для Mocha с использованием expect и supertest, который отлично работает. Но я не понимаю, как это работает. Я использую Express в качестве своего сервера вместе с mongodb и mongoose.
Я понимаю, как будет работать тестирование .get (), в этом есть смысл. Учебники на Youtube и документация по мокко не смогли дать мне никакого реального понимания.
describe('DELETE for a specific todo', ()=>{
it('should delete a todo', (done)=>{
let id0 = todos[0]._id
request(app)
.delete(`/todos/${id0}`)
.expect(200)
.expect((response)=>{
expect(response.body.todo._id).toBe(id0)
});
.end((err, res)=>{
if (err){
return done(err)
}
Todo.findById(id0).then((todo)=>{
expect(todo).toNotExist();
}).catch((err)=>done(err))
})
});
it('should fail to find ID in db', (done)=>{
request(app)
.delete(`/todos/${new ObjectID()}`)
.expect(500)
.end(done)
});
it('should fail due to invalid ID', (done)=>{
request(app)
.delete('/todos/999')
.expect(404)
.end(done)
});
});
Этот код работает просто найти, модель / коллекция в порядке, но как получается, что мокко тестирует .delete, не удаляя что-то из моей базы данных? Создает ли он фиктивную базу данных, а затем запускает на ней указанные тесты? Он что-то удаляет, запускает тест, а затем восстанавливает его? Я просто не понимаю, что делает mocha / supertest, когда я использую request (app) .delete (). Я имею в виду, что он ДОЛЖЕН изменять коллекцию, указанную моей моделью, иначе, если это будет невозможно для Todo (это модель имя) для правильной работы ....



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


На самом деле ваш вопрос не о Mocha, а о том, как работает Supertest.
Supertest предоставляет свой собственный метод expect, который вызывается, когда вы связываете его через Supertest. Supertest сам по себе является оболочкой для Superagent, которая предоставляет различные методы запроса. В этом случае метод Superagent .delete будет буквально вызывать HTTP-запрос DELETE на ваш экспресс-сервер, и, если вы не выполняете какую-либо форму имитации в настройке вашего Express-сервера, он будет выполнять любые операции, которые ваш Express-сервер имеет для этого. маршрут.
TL; DR: Supertest не выполняет никаких издевательств, ожидается, что ваш код выполнит любую настройку для имитации на сервере Express, к которому вы подключаете Supertest. Без этого он удалит данные или выполнит любую другую логику, которую ваш сервер Express настроил для выполнения на определенном маршруте.