我正在尝试在使用 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/