2015-01-26 1 views
0

Я написал версию fizzbuzz около шести месяцев назад и был довольно уверен, что мое тестовое покрытие в то время было хорошим. Я загрузил его сегодня, и большинство моих тестов тестов не удалось. Первоначально я использовал синтаксис to_be true. Чтобы снова получить тестовое покрытие, мне пришлось изменить этот синтаксис на состояние, равное eq true. Может ли кто-нибудь объяснить, почему это так, и что я все еще правильно тестирую?Различия с синтаксисом Rspec eq и должны быть

Оригинальный пример синтаксиса

**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 defisible по методу, я просто использую здесь true здесь.

ответ

1

be_true был renamed to be_truthy в последних версиях RSpec.

Потому что be_true был удален, спецификация может не работать, поскольку метод больше не существует.

Решение заключается в обновлении кода для использования нового метода. eq(true) работает, но немного отличается: be_truthy и be_falsey предназначены для соответствия значениям true/false-alike (например, nil оценивает значение false, но не равно false).

Если вы используете eq(true), вы притворяетесь строгим соответствием.

Смежные вопросы