【问题标题】:What is the difference between "be_true" and "be true" in RSpecRSpec中的“be_true”和“be true”有什么区别
【发布时间】:2014-11-06 12:51:11
【问题描述】:

谁能通过简单的例子解释一下Ruby中be_truebe true之间的区别。我也看到be_truebe_false被改成了be_truthybe_falsey

我有一个 'be true' 工作的例子,但是当我尝试使用 'be_true''be_truthy' 规范失败。

我使用的是 RSpec 3.1.7 版

【问题讨论】:

    标签: ruby-on-rails ruby rspec rspec3


    【解决方案1】:

    根据this thread be_truebe_false 现在称为be_truthybe_falsy

    be truebe_truthybe falsebe_falsy 之间的基本区别是be_falsy/be_truthy 匹配器通过如果“预期结果”(即任何对象)(对于be_falsy)/不是(对于be_truthy) nilfalse,而另一方面 be truebe false 使用 == 验证您的“预期结果”(布尔对象)等于 @987654340 @/ false.

    rspec expectations' truthiness 的意思是:

    expect(actual).to be_truthy   # passes if actual is truthy (not nil or false)
    expect(actual).to be true     # passes if actual == true
    expect(actual).to be_falsy    # passes if actual is falsy (nil or false)
    expect(actual).to be false    # passes if actual == false
    expect(actual).to be_nil      # passes if actual is nil
    expect(actual).to_not be_nil  # passes if actual is not nil
    

    示例 -

    对于be truebe false

    it { expect(true).to be true }        # passes
    it { expect("string").to be true }    # fails
    it { expect(nil).to be true }         # fails
    it { expect(false).to be true }       # fails
    
    it { expect(false).to be false }      # passes
    it { expect("string").to be false}    # fails
    it { expect(nil).to be false}         # fails
    it { expect(true).to be false}        # fails
    

    对于be_truthybe_falsy

    it { expect(true).to be_truthy }      # passes
    it { expect("string").to be_truthy }  # passes
    it { expect(nil).to be_truthy }       # fails
    it { expect(false).to be_truthy }     # fails
    
    it { expect(false).to be_falsy }      # passes
    it { expect(nil).to be_falsy }        # passes
    it { expect("string").to be_falsy}    # fails
    it { expect(true).to be_falsy }       # fails
    

    除了nil/true/false,您可以在"string" 的位置使用任何其他对象作为“预期结果”,因为它们已经出现在上面显示的示例中。

    【讨论】:

    • 当你说(当不是 nil 或 false 时,be_truthy 为真)时,你是在暗示错误的事情。尽管您的答案是正确的,而且我们大多数人都明白这一点,但这样说在逻辑上是不正确的,应该修改为(当非 nil 或 false 时,be_truthy 为 true)。或者(be_truthy 为真时为非(nil 或 false))。
    • @moeabdol :我不明白你的意思。你能指出我在哪里说“当不是 nil 或 false 时,be_truthy 是真的”?我非常想澄清答案中是否可能发生了误解。 :)
    • 第二段,第二行结束。
    • @moeabdol : 这个:“而另一方面是真假,使用 == 来验证你的“预期结果”是否等于真/假。”?
    • @moeabdol :我明白了,我试图说的是:be_truthy 如果“预期结果”是nilfalse 以外的任何对象,则通过。只是我是这么说的。稍后会编辑它。
    猜你喜欢
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 2011-06-22
    • 2018-12-20
    • 2023-03-14
    • 2014-10-27
    相关资源
    最近更新 更多