2016-07-20 4 views
0

Я довольно новичок в использовании RSpec. Мне интересно, что лучше всего подходит для чтения/вывода. Here I have two examples тестирования метода класса. Первый имеет прямо (?) Читаемые тесты, но вывод немного неоднозначен. Во втором есть подробные/избыточные тесты при чтении, но вывод очень ясен.Readablility in RSpec тесты/вывод

class StringTester 
    def self.is_hello?(s) 
    s == 'hello' 
    end 
end 

RSpec.describe StringTester do 
    # Tests are fairly readable in English... 
    describe '::is_hello?' do 
    it { expect(StringTester.is_hello?('hello')).to be_truthy } 
    it { expect(StringTester.is_hello?('something else')).to be_falsey } 
    end 
end 

# ...but the output is ambiguous without going back to look at the tests. 
# Output: 
# StringTester 
# ::is_hello? 
#  should be truthy 
#  should be falsey 


RSpec.describe StringTester do 
    # Tests are redundant when read in English... 
    describe '::is_hello?' do 
    it 'is true for "hello"' do 
     expect(StringTester.is_hello?('hello')).to be_truthy 
    end 
    it 'is false for "something else"' do 
     expect(StringTester.is_hello?('something else')).to be_falsey 
    end 
    end 
end 

# ...but the output is very straightfoward. 
# Output: 
# StringTester 
# ::is_hello? 
#  is true for "hello" 
#  is false for "something else" 

Таким образом, один из способов считается лучшей практикой, чем другой?

+1

Существует не одна лучшая практика, поэтому любой ответ будет мнение. –

ответ

1

Я бы сказал, что вторая форма обычно предпочтительнее, потому что описание it позволяет вам объяснить правило , которое проходит проверку. В вашем коде выше он выглядит только как дублирование, потому что это очень простой, надуманный пример.

Допустим, вы тестировали код, который проверяет, является ли входной положителен:

describe '#positive?' do it 'is true for numbers greater than zero' do expects(Foo.positive?(1)).to be_truthy end it 'is false for numbers less than zero' do expects(Foo.positive(-1)).to be_falsey end end

Выход RSpec становится более удобным для чтения, как это описывает общую поведение, а не только выход для индивидуального Примеры.

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

  • Нет связанных вопросов^_^