google-app-engine - golang appengine api测试错误 "appengine: NewContext passed an unknown http.Request"

标签 google-app-engine go google-app-engine-go

我正在使用 appengine 和 golang 开发简单的 RESTful API。当我使用 goapp serve 开始服务时代码工作正常,我开始编写单元测试函数来测试 API 端点,我在这里遇到了 panic 错误 appengine: NewContext passed an unknown http.Request。我在运行 goapp test 时遇到此错误。

看起来由于某种原因,我无法传递我创建的请求并将其传递给 appengine.NewContext()

下面是代码片段..

body := strings.NewReader("")

request, err := http.NewRequest("GET", "endpoint url", body) //inst.NewRequest("GET", goalUrl, body) //
if err != nil {
    t.Error(err)
}
t.Log(request)

c := appengine.NewContext(request) // ERROR: appengine: NewContext passed an unknown http.Request

我创建了一个 simple reproducible code .你能帮我吗?或者有没有人在 appengine 上有他们的 golang API 项目,并且有单元测试函数来测试端点,我想看看他们的代码...

这是 gitlab issue我发布的,其中包含问题的所有必需详细信息以及示例和详细的错误消息。感谢您的所有帮助。

最佳答案

很抱歉延迟回复。我正在自己研究解决方案

以下是我如何解决 go appengine 单元测试问题:完整的解决方案代码可以在 this github repo branch 上找到.

在 *_test.go 文件中,我使用了以下内容。

  • httptest.NewServer(..) 创建测试服务器的新实例。还用于捕获用于准备请求对象的服务的基本 URL。
  • aetest.NewContext() 为测试目的创建新上下文
  • http.NewRequest(..) 创建新请求
  • gorilla 的 context.Set(..) 将键(“上下文”)、值(在上述步骤中创建的上下文)分配给上面创建的请求
  • httptest.NewRecorder() 一个新的记录器来保存结果
  • http.Handler.ServeHTTP(..) 传递记录和请求。用于发出 API 请求

对于每个 API 处理程序代码,我没有使用 appengine.NewContext 直接创建新上下文,而是在下面的 sudocode 中描述了代码

using the gorilla's context.GetOk(..), check 
    IF the received request object has the key "Context"
    THEN using value of that key as the context
    ELSE derive context using appengine.NewContext(r)

我已将可重用功能包装到一个名为 aeunittest 的单独库中并在我的代码中使用它。

通过此设置,我能够运行 goapp 测试来触发单元测试。查看solved code有关解决方案的完整详细信息。

这是帮助我找到此解决方案的博文。非常感谢马克。 TESTING GO HTTP HANDLERS IN GOOGLE APP ENGINE WITH MUX AND HIGHER ORDER FUNCTIONS .

关于google-app-engine - golang appengine api测试错误 "appengine: NewContext passed an unknown http.Request",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40316822/

相关文章:

google-app-engine - 谷歌云sql实例 super 权限错误

java - GAE 上的持久性异常

基于配置变量的 Golang 导入

go - 我可以在应用引擎上部署 Golang 应用程序并在不修改代码的情况下读/写文件吗?

google-app-engine - 为什么 gcloud 组件更新命令总是显示重新启动命令

angular - 如何部署“COVID-19的Vererily Pathfinder虚拟代理模板”

java - 使用 JDO 在 Google 数据存储区中创建实体时出错

python - App Engine 反序列化 python 中的记录 : is it really this slow?

go - 转到-“版本”包及其工作方式?

go - 将结构体字段转换为字符串