【发布时间】: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