【发布时间】:2018-03-13 20:58:36
【问题描述】:
正如标题所问,如何使用 Mocha 和 Chai 测试 HTTP 请求?
我最近开始学习单元测试,但我仍然对测试的某些方面感到困惑。我可以通过返回值的精细测试方法获得,但我对如何测试发出 HTTP/IO 请求的方法感到困惑。
例如我有以下代码:
module.exports = someRequest => new Promise((resolve, reject) =>
http.get('http://google.com', resp => {
if(resp.headers['content-type'] !== 200) {
reject(new Error('Failed to connect to Google'));
}
resolve('Connected to Google');
})
);
我要测试2个案例:
- 向 Google 的请求成功
- 对 Google 的请求失败
我是否必须模拟这些请求?如果需要,模拟旨在发出 HTTP 请求的方法的目的是什么?
【问题讨论】:
-
模拟 http.get 怎么样?
-
目的是不依赖网络一致性来验证单元测试。与此相反的(?)是集成测试。
-
谢谢@aurelienshz。这是让我有点困惑的部分。如果服务器无法访问怎么办?模拟如何帮助那里?这是一个集成测试吗?
-
@zero298 确切地说,这就是为什么我建议使用存根来模拟 http.get,这样他就不会依赖 Google 响应是成功还是错误来检查模块的行为测试。
-
还有@BugHunterUK,请注意
resp.headers['content-type']不是您回复的状态。您可能正在那里寻找 resp.status。
标签: node.js unit-testing mocha.js chai