登录
首页 >  Golang >  Go问答

如何在 golang 测试用例中传递基本身份验证和 viper 配置值

来源:stackoverflow

时间:2024-04-14 12:54:33 304浏览 收藏

积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《如何在 golang 测试用例中传递基本身份验证和 viper 配置值》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

我正在使用 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”进行测试时,它不显示任何内容。

第二个问题是 - 如何传递基本身份验证用户名并传递到 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")

要检查您的密钥是否在 viper 中,请运行:require.equal(t, viper.allsettings(), "teststring")

如果您仍然遇到此问题,请分享包含示例应用代码的 github url。

好了,本文到此结束,带大家了解了《如何在 golang 测试用例中传递基本身份验证和 viper 配置值》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>