google-app-engine - Go Appengine 端点测试的问题

标签 google-app-engine go

我正在尝试在使用 appengine 时创建端点测试。不幸的是,由于在创建测试 *Request 结构时使用的 url 中缺少模式(和主机),测试一直失败。运行应用引擎测试时,会为在半随机端口号上运行的特定测试生成一个服务器,这使得似乎无法定义完整的 url 来执行测试。

像这样运行测试的 official docs 非常稀疏,只给出了一半的例子,所以我一直在摸索如何让它发挥作用。

这是我从代码片段中标记的行得到的错误 错误:收到意外错误“发布/auth:不支持的协议(protocol)方案\”\“”

测试代码

func TestEndpoints_Auth(t *testing.T) {

    // input data
    account := Account{
        AuthProvider:   "facebook",
        AuthProviderId: "123345456",
    }
    b, _ := json.Marshal(&account)
    reader := bytes.NewReader(b)

    // test server
    inst, err := aetest.NewInstance(nil)
    if !assert.NoError(t, err) { return }
    defer inst.Close()

    // request
    client := http.Client{}
    req, err := inst.NewRequest("POST", "/auth", reader)
    if !assert.NoError(t, err) { return }
    req.Header.Add(AppAuthToken, "foobar")
    resp, err := client.Do(req)
    if !assert.NoError(t, err) { return }   // <=== Where the error occurs

    // tests
    if !assert.Nil(t, err) { return }
    assert.Equal(t, http.StatusCreated, resp.StatusCode)
}

日志 [GIN-debug] POST/auth --> bitbucket.org/chrisolsen/chriscamp.(*endpoints).Auth-fm(5 个处理程序) [GIN 调试] GET/accounts/me --> bitbucket.org/chrisolsen/chriscamp.(*endpoints).GetMyAccount-fm(7 个处理程序) INFO 2016-04-22 13:23:39,278 devappserver2.py:769] 跳过 SDK 更新检查。 警告 2016-04-22 13:23:39,278 devappserver2.py:785] DEFAULT_VERSION_HOSTNAME 将无法使用 --port=0 正确设置 警告 2016-04-22 13:23:39,345 simple_search_stub.py:1126] 无法从 c:\users\chris\appdata\local\temp\appengine.testapp\search_indexes 读取搜索索引 INFO 2016-04-22 13:23:39,354 api_server.py:205] 在以下位置启动 API 服务器:http://localhost:54461 INFO 2016-04-22 13:23:41,043 dispatcher.py:197] 启动模块“默认”运行于:http://localhost:54462 INFO 2016-04-22 13:23:41,046 admin_server.py:116] 在以下位置启动管理服务器:http://localhost:54466

最佳答案

我真的很希望执行 api 黑盒测试,但是 似乎 使用 appengine 是无法撤消的。相反,我现在直接在端点上执行测试。

req, _ := inst.NewRequest("POST", "/auth", reader)
req.Header.Add(AppAuthToken, "foobar")
resp := httptest.NewRecorder()

handlePostAuth(resp, req)
assert.Equal(t, http.StatusCreated, resp.Code)

关于google-app-engine - Go Appengine 端点测试的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36799573/

相关文章:

go - 元素被错误地从 eBPF LRU HashMap 中逐出

json - 解码json以构造结构时如何设置默认值

python - 用户模型导入错误

python - 检查数据存储中的实体是否存在于 GAE Python 中

google-app-engine - 避免覆盖谷歌应用程序引擎上的 cron 作业

java - 跨 GWT 和 Appengine 开发模式的 JUnit 集成测试,使用 RESTEasy

go - 无法获取当前窗口标题

amazon-web-services - 如何通过 AWS ALB 公开 API 以接收 zip 文件

android - Android 应用通过 post 发送的参数在 Go 语言编写的后端服务器上始终为空

arrays - 数组精简或类似