期望 true 响应 true?

Posted

技术标签:

【中文标题】期望 true 响应 true?【英文标题】:expected true to respond to true? 【发布时间】:2014-07-27 17:23:27 【问题描述】:

我将 rspec-rails 升级到 3.0.1,现在我在所有测试中都看到了这个错误

 Failure/Error: Sidekiq::Status::complete?(json.jid).should be_true
  expected true to respond to `true?`

我找不到解决方案,也找不到我缺少的东西。

【问题讨论】:

rspec failing error: expected false to respond to `false?` 的可能重复项 【参考方案1】:

从 rspec 3.0 开始,be_true 重命名为 be_truthybe_false 重命名为 be_falsey

行为没有改变。所以

(nil).should be_falsey
(false).should be_falsey

会过去的,而且

(anything other than nil or false).should be_truthy

也会通过

来自changelog 3.0.0.beta1 / 2013-11-07

将 be_true 和 be_false 重命名为 be_truthy 和 be_falsey。 (萨姆·菲彭)

【讨论】:

从技术上讲,这个答案是不正确的。 rspec 3.0 be_truthybe true 不同。如果您真的想检查该值是否为真而不仅仅是真,那么您应该使用expect(true).to be true(注意be 和true 之间没有下划线)。参考:relishapp.com/rspec/rspec-expectations/docs/built-in-matchers @LarryKyrala。你是对的 be truebe_truthy 不同。但我的回答和 OP 的问题是关于 be_true (注意存在下划线) 您说得对,先生!对不起,我没有在 3.0 文档中看到任何地方提到的重命名。但它在changelog。 对这个问题的直接回答可能会产生很大的误导性,应该附上 LarryKyrala 提到的清晰注释。如果@Santhosh 在他的回答中添加注释来解释微妙的陷阱,这不会有什么坏处。这将帮助许多人避免一些严重的误解。【参考方案2】:

为了不重写很多现有的规范,你可以将这个添加到 spec_helper 中(这会损害我的和谐感但节省时间):

def true.true?
  true
end

def true.false?
  false
end

def false.true?
  false
end

def false.false?
  true
end

【讨论】:

这种东西很容易找到和替换。例如:git grep -l be_true | xargs sed -i 's/be_true/be_truthy/'

以上是关于期望 true 响应 true?的主要内容,如果未能解决你的问题,请参考以下文章

尽管 userInteractionEnabled = true,但 UIView 中的 UIButton 没有响应触摸事件

IsCancellationRequested = true 并转到异常。如何从 API 获得所有响应?

如何实现“return true;”?错误:“消息端口在收到响应之前关闭。”

JavaFX/Mac:当我将 useSystemMenuBar 设置为 true 时,系统菜单变得无响应

我啥时候应该在我的响应标头中真正将“Access-Control-Allow-Credentials”设置为“true”?

不知道如何在空手道中验证响应?