与Rspec语法等式的差异

时间:2015-01-26 12:48:33

标签: ruby rspec

我六个月前写过一个版本的fizzbuzz,并且相当肯定我当时的测试报道是好的。我今天装了它,并且我的大多数规格测试都失败了。最初我使用语法to_be true。为了使测试覆盖率再次变好,我不得不将此语法更改为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方法中扩展代码,我只是在这里使用true作为例子。

1 个答案:

答案 0 :(得分:1)

在最新版本的RSpec中,

be_truerenamed to be_truthy

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

解决方案是更新代码以使用新方法。 eq(true)有效,但略有不同:be_truthybe_falsey旨在匹配真/假相似的值(例如,nil计算为false,但不等于false )。

如果您使用eq(true),则假装严格匹配。