19

任何人都可以用简单的例子解释一下Rubybe_true和Ruby 之间的区别。be true我也看到be_true并被be_false更改为be_truthybe_falsey

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

我正在使用 RSpec 版本 3.1.7

4

1 回答 1

37

根据这个线程 be_truebe_false现在被称为be_truthyand be_falsy

be trueand be_truthyor be falseand之间的基本区别be_falsybe_falsy/be_truthy匹配器通过如果“预期结果”(即任何对象)(for be_falsy)/不是(for be_truthy) nilor ,而false另一方面用于验证您的“预期结果”(布尔对象) 等于/ 。be truebe false==truefalse

从rspec 期望的真实性来看,这意味着:

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

"string"您可以在except nil//的位置使用任何其他对象作为“预期结果” truefalse因为它们已经存在于上面显示的示例中。

于 2014-11-06T13:20:04.730 回答