期望 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_truthy
和 be_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.0be_truthy
与 be true
不同。如果您真的想检查该值是否为真而不仅仅是真,那么您应该使用expect(true).to be true
(注意be 和true 之间没有下划线)。参考:relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
@LarryKyrala。你是对的 be true
与 be_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”?