unit-testing - 使用 github.com/jarcoal/httpmock 验证请求正文
问题描述
我尝试测试的函数接受数据结构,形成 aquery_dsl
然后/_search
使用形成的查询调用弹性搜索。因此,我想断言query_dsl
and url
which 会形成。
我github.com/jarcoal/httpmock
用来模拟net/http
单元测试中的请求。根据文档,它公开func GetCallCountInfo() map[string]int
以验证特定端点被击中的次数。但我也有兴趣知道进行此调用时的请求正文是什么。
http.Client
没有暴露,因此不能覆盖/模拟测试。
如果无法使用此包,那么是否有任何其他库可以模拟网络请求并保留请求主体?
解决方案
按照@georgeok 的建议,我们可以创建一个模拟http 服务器并在发出请求时捕获请求正文。以下是创建服务器并存储请求正文的代码片段。
server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
actualRequestBody, err = ioutil.ReadAll(req.Body)
check(err)
// Send mock response to be tested
_, err := rw.Write(bytes)
check(err)
}))
defer server.Close()
现在我们的请求正文存储在actualRequestBody
变量中,我们可以断言它的正确性。
唯一需要确保它有效的是在 host 上进行调用server.URL
。因为它在提到的地址上启动服务器server.URL
。因此,如果从您的代码调用不同的服务器,这将不会捕获它。
推荐阅读
- java - Netbeans 11.1 Exe 安装程序构建失败
- r - 在 R 中分隔具有相同列名(几乎全部)的文件
- php - 如何在 LARAVEL 中使用数据库查询访问存储文件
- centos - yum --downloadonly 忽略本地 repo 中的包
- javascript - handontable 为我的 JSON 返回空白。我如何解决它?
- python - NLTK 标记优化
- git - Git python API在使用标签时返回无效的分支名称
- csvhelper - 当 CSVHelper 抛出错误数据时,如何判断文件在哪里出现问题?
- javascript - webpack index.js simple-wc-router 设置
- swift - iOS13 UICollectionViewFlowLayout 子类不接收collectionView框架更改