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


person ThisIsMyDisplayName    schedule 23.12.2018    source источник


Ответы (1)


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

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

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

person JayReardon    schedule 23.12.2018