go - 如何在 golang 测试用例中传递基本的 auth 和 viper 配置值

标签 go

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

相关文章:

amazon-web-services - 如何使用 go-iris 框架将 REST API 部署到 AWS lambda

go - Go 中的 RabbitMQ 消费者

linux - 日期转换代码在不同机器上表现不同

pointers - 在 golang 文本/模板中取消引用指针

string - 遍历 go 字符串并从 go 中的字符创建字符串

go - 有人可以解释一下为什么 "curl: (7) Failed to connect to 127.0.0.1 port 2000: Connection refused"吗?

go - spf13/cobra无法将二进制文件下载到$ GOPATH/bin

go - 在 Golang 中使用 BigQuery Write API

go - 在Golang中计划Google Cloud Functions?

windows - 如何在GO中实现跨平台文件锁定