与 Rspec 语法 eq 和 to be 的区别

Differences with Rspec syntax eq and to be

大约六个月前,我写了一个 fizzbuzz 版本,并且相当确定我当时的测试覆盖率很好。我今天加载了它,但我的大部分规格测试都失败了。最初我使用语法 to_be true。为了使测试覆盖率再次良好,我不得不将此语法更改为 state 为 eq true。任何人都可以解释为什么会这样并且我仍在正确测试吗?

原始语法示例

**fizzbuzz_spec.rb**
require 'fizzbuzz'


describe 'FizzBuzz' do 
    context 'it knows that a number is divisible by' do 
        it '3' do 
            expect(is_divisible_by_three?(3)).to be_true
        end
    end
end

**fizzbuzz.rb**
def is_divisible_by_three?(number)
    true
end

**ERROR:**   1) FizzBuzz it knows that a number is divisible by 3
     Failure/Error: expect(is_divisible_by_three?(3)).to be_true
       expected true to respond to `true?`
     # ./spec/fizzbuzz_spec.rb:7:in `block (3 levels) in <top (required)>'

新语法示例 fizzbuzz_spec.rb 需要 'fizzbuzz'

describe 'FizzBuzz' do 
    context 'it knows that a number is divisible by' do 
        it '3' do 
            expect(is_divisible_by_three?(3)).to eq true
        end
    end
end

**fizzbuzz.rb**
def is_divisible_by_three?(number)
    true
end

我知道我需要扩展 def divisible by method 中的代码,我只是在这里使用 true 作为示例。

be_true 在 RSpec 的最新版本中已 renamed to be_truthy

由于 be_true 已被删除,规范可能会失败,因为该方法不再存在。

解决方案是更新代码以使用新方法。 eq(true) 有效,但略有不同:be_truthybe_falsey 旨在匹配 true/false-alike 值(例如 nil 评估为 false,但不等于 false)。

如果你使用 eq(true) 你假装严格匹配。