单元/集成测试 Express REST API, mongoose, mocha, sinon, chai, supertest

Posted

技术标签:

【中文标题】单元/集成测试 Express REST API, mongoose, mocha, sinon, chai, supertest【英文标题】:Unit/Integration testing Express REST API, mongoose, mocha, sinon, chai, supertest 【发布时间】:2015-06-02 19:07:16 【问题描述】:

我对使用 mongoose 对 Express REST API 进行单元测试感到很困惑。 我听说过 supertest、sinon、chai 和 mocha。

我想写测试到:

1) 测试API接口:

创建一个超级测试服务器并在其上发出请求(例如 GET /users、POST /users)并检查它是否调用了正确的路由。

2) 测试猫鼬查询:

当调用路由时,我想检查是否调用了正确的 mongoose 函数(find、findById)以及它是否返回了正确的数据(假数据),例如:

当调用 User.findId 时,返回假用户(在 beforeEach 中定义的数据)。 这是 sinon 存根的用途吗?

3) 集成测试: 创建一个测试数据库(在测试运行时创建),填充它并在测试完成时清理它。 在超测服务器上进行 API 调用(GET 用户、PUT 用户/1202082、DELETE 用户/1202082...),并检查是否读取、创建、更新、删除了正确的数据...

这是要走的路吗? 每个案例的简单示例会非常好!

【问题讨论】:

【参考方案1】:

如果您想要测试某些猫鼬模型的static'smethod's,我建议您使用sinon 和sinon-mongoose。 (我猜它与chai兼容)

这样,您无需连接到 Mongo DB 并轻松返回虚假数据。

您可以在 sinon-mongoose 存储库中找到工作(和简单)示例。

【讨论】:

以上是关于单元/集成测试 Express REST API, mongoose, mocha, sinon, chai, supertest的主要内容,如果未能解决你的问题,请参考以下文章

功能/集成测试 NodeJS ReST API 实现

如何在 Flutter 集成测试中最好地存根/模拟 rest API 调用

如何使用 Advanced REST Client 或 Postman 测试 Express/node REST API 后端?

使用 PayPal REST API 通过 Express Checkout 测试拒绝付款

PayPal Rest API Express Checkout 工作流程

如何为 django-rest-framework api 编写单元测试?