RSpec中"be_true"和"be true"之间的区别是什么?

Dev*_*Raj 15 ruby rspec ruby-on-rails rspec3

任何一个可以请解释一下我一下的区别be_true,并be true用简单的例子红宝石英寸 我也见过be_true并且be_false改为be_truthybe_falsey

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

我使用的是RSpec 3.1.7版

Sur*_*rya 29

根据这个线程 be_true,be_false现在被称为be_truthybe_falsy.

之间的基本区别be truebe_truthybe falsebe_falsybe_falsy/ be_truthy匹配传递,如果"期望的结果"(即任何对象)(对be_falsy)/ (对be_truthy)nilfalse,而在另一方面be truebe false使用==来验证你的"预期的结果"(布尔对象)等于true/ false.

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
Run Code Online (Sandbox Code Playgroud)

例子 -

对于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
Run Code Online (Sandbox Code Playgroud)

对于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
Run Code Online (Sandbox Code Playgroud)

您可以在"string"nil/ true/ 之外的位置使用任何其他对象作为"预期结果" false,因为它们已经存在于上面显示的示例中.