Как request (app) .del () /. Delete () работает для Mocha / Supertest?

У меня есть тест для 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 (это модель имя) для правильной работы ....

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
989
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На самом деле ваш вопрос не о Mocha, а о том, как работает Supertest.

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

TL; DR: Supertest не выполняет никаких издевательств, ожидается, что ваш код выполнит любую настройку для имитации на сервере Express, к которому вы подключаете Supertest. Без этого он удалит данные или выполнит любую другую логику, которую ваш сервер Express настроил для выполнения на определенном маршруте.

Другие вопросы по теме