我六个月前写过一个版本的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作为例子。
答案 0 :(得分:1)
be_true
已renamed to be_truthy
。
由于删除了be_true
,规范可能会失败,因为该方法不再存在。
解决方案是更新代码以使用新方法。 eq(true)
有效,但略有不同:be_truthy
和be_falsey
旨在匹配真/假相似的值(例如,nil计算为false,但不等于false )。
如果您使用eq(true)
,则假装严格匹配。