【问题标题】:How to pass basic auth and viper config value in golang Test cases如何在 golang 测试用例中传递基本的 auth 和 viper 配置值
【发布时间】:2020-01-16 02:08:50
【问题描述】:

我正在使用 echo 和 testify/assert 创建测试用例,我无法获取传递到主包的 viper 字符串令牌,我正在调用主包服务文件。

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”时,它的打印令牌,但是当我使用“go test”进行测试时,它没有显示。

第二个问题是 - 如何传递基本的 auth 用户名并传递到 main_test.go 文件中

【问题讨论】:

  • 请在此行确认您面临的问题:`log.Info(viper.GetString("token"))`
  • 我在 req.Header.Add("token", viper.GetString("token")) 遇到问题,我只需要在 golang 测试方法中传递 token 和 base64

标签: go


【解决方案1】:

要设置基本身份验证,试试这个:

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")

要检查您的密钥是否处于 viper 中或未运行:require.Equal(t, viper.AllSettings(), "teststring")

如果您仍然遇到问题,请将 github url 与示例应用代码共享。

【讨论】:

  • 感谢prakash,我在单元测试中询问,您发布的是正常的http请求。
猜你喜欢
  • 2017-07-24
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
  • 2020-12-21
  • 1970-01-01
  • 2021-08-25
  • 1970-01-01
相关资源
最近更新 更多