【问题标题】:Problems with Go Appengine endpoint testsGo Appengine 端点测试的问题
【发布时间】:2016-04-22 17:03:15
【问题描述】:

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

像这样运行测试的official docs 非常稀少,只给出了一半的例子,所以我对如何让它工作感到摸不着头脑。

这是我从代码 sn-p 中的标记行得到的错误 Error: Received unexpected error "Post /auth: unsupported protocol scheme \"\""

测试代码

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 handlers) [GIN-debug] GET /accounts/me --> bitbucket.org/chrisolsen/chriscamp.(*endpoints).GetMyAccount-fm (7 handlers) INFO 2016-04-22 13:23:39,278 devappserver2.py:769] Skipping SDK update check. WARNING 2016-04-22 13:23:39,278 devappserver2.py:785] DEFAULT_VERSION_HOSTNAME will not be set correctly with --port=0 WARNING 2016-04-22 13:23:39,345 simple_search_stub.py:1126] Could not read search indexes from c:\users\chris\appdata\local\temp\appengine.testapp\search_indexes INFO 2016-04-22 13:23:39,354 api_server.py:205] Starting API server at: http://localhost:54461 INFO 2016-04-22 13:23:41,043 dispatcher.py:197] Starting module "default" running at: http://localhost:54462 INFO 2016-04-22 13:23:41,046 admin_server.py:116] Starting admin server at: http://localhost:54466

【问题讨论】:

  • 我认为您可能不需要NewInstance,而是创建aetest.NewContext(),并使用该上下文使用URL Fetch调用外部facebook服务
  • 如果您正在测试需要上下文指针(内存缓存、数据存储、电子邮件等)的方法/服务,则获取 context 指针有效,但使用实例测试端点是唯一的方法我可以找到创建一个有效的http.Request,但是文档非常薄弱,所以可能有一种方法没有显示。

标签: google-app-engine go


【解决方案1】:

我真的希望执行 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)

【讨论】:

    猜你喜欢
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    相关资源
    最近更新 更多