Ruby TDD и Rspec - PullRequest
       26

Ruby TDD и Rspec

0 голосов
/ 22 ноября 2018

Я новичок в тестировании в ruby ​​с Rspec.Я просто хочу написать простой тест, чтобы увидеть, работает ли приведенный ниже код.Я не уверен, как это сделать.Код возвращает аббревиатуру данной строки.спасибо

def acronym(sentence)
  first_letters = []
  sentence.split.each do |word|
    first_letters << word[0]
  end
  first_letters.join
end

describe "acro method" do
  it "returns acronym of words" do

  end
end

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Определите ваш ввод и ожидаемый вывод

Смысл TDD - проверить ожидаемое поведение .Чтобы построить тест, вы должны определить как fixture (известное входное значение), так и ваше ожидание (результат, который вы ожидаете, что ваш метод выдаст заданное входное значение).Затем вы сравниваете результаты вашей спецификации с подходящим сопоставителем.Например:

def acronym(sentence)
  first_letters = []
  sentence.split.each do |word|
    first_letters << word[0]
  end 
  first_letters.join
end

describe "#acronym" do
  let(:sentence) { 'A very short sentence.' }

  it "returns initial letter of each word" do
    expect(acronym sentence).to eq('Avss')
  end 
end

Когда вы запускаете спецификацию в формате документа, она должна читаться довольно естественно.

$ rspec --format doc foo_spec.rb 

#acronym
  returns initial letter of each word

Finished in 0.0017 seconds (files took 0.12358 seconds to load)
1 example, 0 failures

Если вы измените ожидаемый результат теста сAvss до avss, тогда ваши ожидания не оправдаются.Хорошо написанный тест даст вам полезную ошибку, такую ​​как:

Failures:

  1) #acronym returns initial letter of each word
     Failure/Error: expect(acronym sentence).to eq('avss')

       expected: "avss"
            got: "Avss"

       (compared using ==)

Затем вы можете исправить свой класс или метод, пока не будет достигнуто желаемое поведение.

0 голосов
/ 22 ноября 2018

Используйте средства сравнения RSpec, чтобы проверить, что то, что выводит ваш метод, действительно соответствует ожидаемому.https://relishapp.com/rspec/rspec-expectations/docs/built-in-matchers

describe "acro method" do
  it "returns acronym of words" do
    test_sentence = "this is a test acronym"
    expected_acronym = "tiata"

    expect(acronym(test_sentence)).to eq(expected_acronym)
  end
end
...