首页  >  文章  >  后端开发  >  如何使用路径变量测试 Go-Chi 路由:解决无法处理的实体错误

如何使用路径变量测试 Go-Chi 路由:解决无法处理的实体错误

Linda Hamilton
Linda Hamilton原创
2024-10-27 06:59:29325浏览

How to Test Go-Chi Routes with Path Variables:  Resolving Unprocessable Entity Errors

使用路径变量测试 Chi 路由:故障排除和解决方案

在 go-chi 中,路由内的路径变量访问由中间件函数(如文章 Ctx.测试此类路由时,必须在 HTTP 请求的上下文中手动设置路径变量。这是因为 httptest 包不会自动填充上下文。

问题:
要测试使用路径变量的路由,需要使用 httptest.NewRequest 创建测试请求。但是测试过程中执行ArticleCtx中间件会返回HTTP错误(Unprocessable Entity),提示路径变量上下文不可用。

解决方案:
解决方案在于手动在将路径参数传递给处理程序之前将路径参数添加到请求上下文中:

<code class="go">// Create a context with the path variable
req := httptest.NewRequest("GET", "/articles/1", nil)
rctx := chi.NewRouteContext()
rctx.URLParams.Add("articleID", "1")

// Set the RouteCtx in the request context
req = req.WithContext(context.WithValue(req.Context(), chi.RouteCtxKey, rctx))

// Execute the handler with the modified request
rec := httptest.NewRecorder()
ArticleCtx(http.HandlerFunc(GetArticleID)).ServeHTTP(rec, req)</code>

通过将路径变量添加到请求的上下文中,ArticleCtx 中间件可以正确检索文章 ID,从而解决 Unprocessable Entity 错误。

其他最佳实践:

  • 考虑使用 testify 等测试框架来简化单元测试。
  • 使用 httptest.NewRecorder() 方法捕获被测试处理程序编写的响应。
  • 确保预期响应正文与实际响应正文匹配以实现成功的测试。
  • 实施其他测试以涵盖各种场景,例如处理错误请求或路线级错误。

以上是如何使用路径变量测试 Go-Chi 路由:解决无法处理的实体错误的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn