Как request (app) .del () /. Delete () работает для Mocha / Supertest? - PullRequest
0 голосов
/ 23 декабря 2018

У меня есть тест для Мокко, использующий функцию ожидаемого и супер-тест, который работает просто отлично.Но я не понимаю, как это работает.Я использую экспресс в качестве сервера, наряду с 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 (который является моделью)имя) для правильной работы ....

1 Ответ

0 голосов
/ 23 декабря 2018

Ваш вопрос на самом деле не о мокко, а более конкретно о том, как работает супертест.

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

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

...