与 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_truthy
和 be_falsey
旨在匹配 true/false-alike 值(例如 nil 评估为 false,但不等于 false)。
如果你使用 eq(true)
你假装严格匹配。
大约六个月前,我写了一个 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_truthy
和 be_falsey
旨在匹配 true/false-alike 值(例如 nil 评估为 false,但不等于 false)。
如果你使用 eq(true)
你假装严格匹配。