首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gomega的Equal()能处理多个值吗?

Gomega的Equal()能处理多个值吗?
EN

Stack Overflow用户
提问于 2018-04-14 07:01:30
回答 2查看 3.6K关注 0票数 1

我正在测试一个函数,以便使用gomega向服务器发送模拟请求,并且我想验证一下: 1.请求已经启动。2请求已经完成。为此,我要归还两个布尔人。在下面的示例中,它们都应该计算为true,但是值可能会更改。我试过这样做:

代码语言:javascript
复制
g := gomega.NewGomegaWithT(t)
...
g.Eventually(func() (bool, bool) {
...
    start = false
    end = true

    if (request.status == "started") {
        start = true
    }
    if (request.status == "complete") {
        end = true
    }
    return start, end
}).Should(Equal((true, true))

但似乎gomega的Equal()不处理多个变量。有办法绕过这件事吗?评估两个返回值是错误的做法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-14 11:44:20

您可以使用我根据您的伪代码编写的包装函数。

代码语言:javascript
复制
g := gomega.NewGomegaWithT(t)
...
testedFunc := func() (bool, bool) {
...
    start = false
    end = true

    if (request.status == "started") {
        start = true
    }
    if (request.status == "complete") {
        end = true
    }
    return start, end
}

g.Eventually(func() map[string]bool{
    r1,r2 := testedFunc()
    return map[string]bool{"start": r1, "end": r2}
}).Should(Equal(map[string]bool{"start": true, "end": true}))

我使用的是一个映射,而不是简单的r1&r2,因此,您可以看到结果到底有什么问题。在我看来,比较两个返回值是一种糟糕的做法,除非第二个返回值是错误的。始终可以将多个返回值组合在一个单一语言结构中(映射、切片、结构等)。就像我在包装函数中所做的那样。我理解异步最终方法很难实现,但一般来说,我会尝试分别断言每个返回值。

票数 0
EN

Stack Overflow用户

发布于 2018-04-14 11:22:50

's doc中,有人说可以使用多次返回。

您传递给的函数最终可以有多个返回值。在这种情况下,最终将第一个返回值传递给匹配器,并断言所有其他返回值都为零或零值。这允许您最终与返回值和错误的函数一起使用Go中的常见模式。

在您的代码中,您能更改这一行吗?

.Should(Equal((true, true)).Should(Equal(true, true)

这应该能解决问题。

编辑:

我忽略了Equal只接收一个接口参数。是我的错。

对于将来的参考,对于比较gomega的eventually中的多个值,结构的Array (或任何数据类型)都是有用的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49828807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档