【问题标题】:How does request(app).del()/.delete() work for Mocha/Supertest?request(app).del()/.delete() 如何为 Mocha/Supertest 工作?
【发布时间】:2019-05-22 21:56:00
【问题描述】:

我有一个 Mocha 测试,使用 expect 和 supertest,效果很好。但我不明白它是如何工作的。我使用 express 作为我的服务器,以及 mongodb 和 mongoose。

我了解测试 .get() 的工作原理,这非常有意义。 Youtube 教程和 mocha 文档无法为我提供任何真正的见解。

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)
  });
});

这段代码只是发现,模型/集合完全没问题,但是 mocha 是如何测试 .delete 而不实际从我的数据库中删除某些内容的呢?它是否创建了一个模拟数据库,然后在其上运行所述测试?它会删除一些东西,运行测试,然后取消删除吗?当我使用 request(app).delete() 时,我只是不明白 mocha/supertest 在做什么。我的意思是,它必须修改我的模型指定的集合,否则如果 Todo 不可能(这是模型名称)正常工作....

【问题讨论】:

    标签: javascript node.js mocha.js supertest


    【解决方案1】:

    您的问题并不是关于 Mocha,而是更具体地说是关于 Supertest 的工作原理。

    Supertest 提供了自己的 expect 方法,当您将其链接到 Supertest 时,就会调用该方法。 Supertest 本身是Superagent 的包装器,它提供了各种请求方法。在这种情况下,Superagent 的 .delete 方法将直接调用 HTTP DELETE 请求到您的 express 服务器,除非您在 Express 服务器的设置中进行某种形式的模拟,否则它将执行您的 Express 服务器具有的任何操作对于那条路线。

    TL;DR:Supertest 不执行任何模拟,您的代码应在您连接 Supertest 的 Express 服务器中执行任何模拟设置。否则,它将删除数据或执行您的 Express 服务器设置为在特定路由上执行的任何其他逻辑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      • 2011-10-05
      • 1970-01-01
      相关资源
      最近更新 更多