Ruby TDD 和 Rspec

Ruby TDD and Rspec

我是 ruby 中 Rspec 测试的新手。我只是想编写一个简单的测试来查看下面的代码是否有效。我不知道该怎么做。代码 returns 给定字符串的首字母缩写词。谢谢

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

使用 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

定义您的输入和预期输出

TDD 的重点是测试预期行为。要构建测试,您必须同时定义 fixture(已知输入值)和 expectation(您希望方法产生给定的输出一个已知的输入值)。然后,您将规范的结果与合适的匹配器进行比较。例如:

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 ==)

然后您可以修复您的 class 或方法,直到实现所需的行为。