我正在使用 echo 和 testify/assert 创建测试用例,我无法获取传递到主包中的毒蛇字符串 token ,我正在调用主包服务文件。
func TestGetData(t *testing.T) {
// Setup
e := echo.New()
req := httptest.NewRequest(http.MethodGet, "/api/v1/testdata", nil)
req.Header.Set("Content-Type", "application/json")
log.Info(viper.GetString("token"))
req.Header.Add("token", viper.GetString("token"))
rec := httptest.NewRecorder()
c := e.NewContext(req, rec)
res := rec.Result()
defer res.Body.Close()
// Assertions
if assert.NoError(t, controllers.GetData(c)) {
assert.Equal(t, http.StatusOK, rec.Code)
//assert.Equal(t, sections, rec.Body.String())
}
}
当我运行“go run main.go”时,它的打印 token 但是当我使用“go test”进行测试时,它没有显示。
第二个问题是 - 如何传递基本身份验证用户名并传递到 main_test.go 文件
最佳答案
要设置基本身份验证,请尝试以下操作:
req.Header.Set("Authorization", "Basic "+basicAuth(username, password))
func basicAuth(username, password string) string {
auth := username + ":" + password
return base64.StdEncoding.EncodeToString([]byte(auth))
}
同时替换您的 httptest .NewRequest 与 http .NewRequest 如下所述:
req := http.NewRequest(http.MethodGet, "/api/v1/testdata", nil)
确保将值放入 get api 中,例如:
viper.SetDefault("token", "12334")
要检查您的 key 是否处于 viper 中或未运行:
require.Equal(t, viper.AllSettings(), "teststring")
如果您仍然遇到问题,请与示例应用程序代码共享 github url。
关于go - 如何在 golang 测试用例中传递基本的 auth 和 viper 配置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59714341/