【发布时间】: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