测试工具#
Huma 包含一个 humatest 包,以简化为您的 API 编写测试。
创建测试 API#
第一步是创建测试 API 实例。这是一个与路由无关的 API 实例,您可以为其注册路由,然后对其发出请求。
code.go
import (
"testing"
"github.com/danielgtaylor/huma/v2/humatest"
)
func TestMyAPI(t *testing.T) {
router, api := humatest.New(t)
}
注册路由#
测试 API 与其他 API 相同,您可以像对主 API 实例一样为其注册路由。
code.go
func TestMyAPI(t *testing.T) {
router, api := humatest.New(t)
// Register routes...
addRoutes(api)
}
发出请求#
注册路由后,您可以对测试 API 实例发出请求。测试 API 对象提供了 Get、Post、Put、Patch 和 Delete 等便利方法。
code.go
func TestMyAPI(t *testing.T) {
router, api := humatest.New(t)
// Register routes...
addRoutes(api)
// Make a GET request
resp := api.Get("/some/path?foo=bar")
// Make a PUT request
resp = api.Put("/some/path",
"My-Header: abc123",
map[string]any{
"author": "daniel",
"rating": 5,
})
}
请求便利方法接受 URL 路径,后跟任意数量的可选参数。如果参数是字符串,则视为标头;如果是 io.Reader,则视为原始请求体;否则,它将被序列化为 JSON 并用作请求体。
断言#
请求便利方法返回标准库中的 *httptest.ResponseRecorder 实例。您可以使用 Code 和 Body 字段检查响应状态码和响应体。
code.go
if resp.Code != http.StatusOK {
t.Fail("Unexpected status code", resp.Code)
}
if !strings.Contains(resp.Body.String(), "some text") {
t.Fail("Unexpected response body", resp.Body.String())
}
使用您喜欢的任何断言库来执行这些检查。stretchr/testify 是一个流行且易于使用的选项。