【发布时间】:2021-06-15 08:34:31
【问题描述】:
可以在端口上启动服务器并使用库“supertest”对其进行测试。 我想知道是否可以在不运行服务器的情况下做同样的事情?
Express 应用程序,与 fastify 应用程序或其他应用程序相同,在后台从本地节点获取请求和响应参数,如下所示:
const server = http.createServer((req, res) => {
res.end('hello\n');
});
所以应该可以直接从测试中调用该回调。 如何获得该回调?是否有任何工具包可以帮助构建回调的请求和响应对象?
原因 - 只是为了让测试更快。由于我不想测试 HTTP 协议和节点内部,我想跳过它来节省时间。
【问题讨论】:
-
当然,你只需要创建具有所有正确状态和方法的模拟(但功能)
req和res对象,然后将它们很好地挂钩以查看结果。 -
你可以这样做。但是您需要区分单元测试和 API 测试。你应该两者都做,如果你在做单元测试,你应该一个一个地测试中间件,并根据需要最低限度地模拟 req、res 对象。如果你在做 API 测试,那么可以使用
supertest或newman。在测试代码的某处,无论如何您都需要激活您的服务器。所以你应该知道是否有任何外部 API 调用,如果有,你可以让它进行调用并等待,或者只是模拟结果。 -
@Darkripper 你怎么知道我无法区分单元测试和 API 测试(可能称为集成或 e2e)?应该两者都做 - 我不这么认为,如果所有代码都包含集成或 e2e 测试 - 不需要单元。
-
@user2541867 您也可以将 API 测试称为集成或 e2e(取决于您的应用程序)。最好同时进行单元测试和集成测试。单元测试确实会迫使您以易于测试的块编写您的代码,并且从长远来看更易于维护。仅进行集成测试可能不会检查代码中的所有
unit,但它仍然有效。最后,这只是偏好。你可以在这里阅读更多内容martinfowler.com/articles/practical-test-pyramid.html -
决定如何测试你的代码是关于花时间测试的利弊之间的平衡。所以是的,你的观点绝对正确
标签: node.js api express testing fastify