В чем разница между "be_true" и "be true" в RSpec

Может кто-нибудь объяснить мне разницу между be_true и be true в Ruby с простым примером. Я также видел, что be_true и be_false изменены на be_truthy и be_falsey

У меня есть пример, где 'be true' работал, но когда я попытался использовать 'be_true' или 'be_truthy' spec failed.

Я использую RSpec версии 3.1.7

Ответ 1

В соответствии с этот поток be_true и be_false теперь известны как be_truthy и be_falsy.

Основное различие между be true и be_truthy или be false и be_falsy заключается в том, что совпадение be_falsy/be_truthy проходит, если "ожидаемый результат" (т.е. любой объект) равен (для be_falsy)/ не (для be_truthy) nil или false, а с другой стороны be true и be 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

Примеры -

Для be true и be 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_truthy и be_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", за исключением nil/true/false, потому что они уже присутствуют в примерах, показанных выше.