0
0
Rubyprogramming~20 mins

Test-driven development workflow in Ruby - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
TDD Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of a failing test in TDD
What will be the output when running this RSpec test before implementing the method?
Ruby
RSpec.describe Calculator do
  describe '#add' do
    it 'adds two numbers' do
      calc = Calculator.new
      expect(calc.add(2, 3)).to eq(5)
    end
  end
end

class Calculator
  # add method not implemented yet
end
ASyntaxError: unexpected end-of-input, expecting keyword_end
B
Failure/Error: expect(calc.add(2, 3)).to eq(5)

RSpec::Expectations::ExpectationNotMetError:
  expected: 5
       got: nil
C
Failure/Error: expect(calc.add(2, 3)).to eq(5)

NoMethodError:
  undefined method `add' for #<Calculator:0x00007f...>
DTest passed successfully with 1 example, 0 failures
Attempts:
2 left
💡 Hint
Think about what happens if you call a method that does not exist yet on an object.
🧠 Conceptual
intermediate
1:30remaining
Purpose of writing a failing test first in TDD
Why do developers write a failing test before implementing the actual code in Test-driven development?
ATo ensure the test framework is working and to define the expected behavior clearly before coding
BTo speed up coding by skipping tests and writing code directly
CTo make the code run faster by pre-checking errors
DTo avoid writing documentation for the code
Attempts:
2 left
💡 Hint
Think about how TDD helps clarify requirements and verify correctness.
Predict Output
advanced
2:00remaining
Result of running a test after implementing minimal code
Given this test and implementation, what is the test output?
Ruby
RSpec.describe Calculator do
  describe '#add' do
    it 'adds two numbers' do
      calc = Calculator.new
      expect(calc.add(2, 3)).to eq(5)
    end
  end
end

class Calculator
  def add(a, b)
    a + b
  end
end
ANoMethodError: undefined method `add' for Calculator
B1 example, 0 failures
CSyntaxError: undefined local variable or method `a' for Calculator
D
1 example, 1 failure
Failure/Error: expect(calc.add(2, 3)).to eq(5)

RSpec::Expectations::ExpectationNotMetError:
  expected: 5
       got: 0
Attempts:
2 left
💡 Hint
Check if the add method returns the sum of two numbers.
🔧 Debug
advanced
2:00remaining
Identify the error in this TDD cycle code snippet
What error will this test produce when run?
Ruby
RSpec.describe Calculator do
  describe '#subtract' do
    it 'subtracts two numbers' do
      calc = Calculator.new
      expect(calc.subtract(5, 3)).to eq(2)
    end
  end
end

class Calculator
  def subtract(a, b)
    a - b
  # missing end here
end
ASyntaxError: unexpected end-of-input, expecting keyword_end
BNoMethodError: undefined method `subtract' for Calculator
C1 example, 0 failures
DRSpec::Expectations::ExpectationNotMetError: expected 2 but got 8
Attempts:
2 left
💡 Hint
Look carefully at the method definition and class structure.
🧠 Conceptual
expert
1:30remaining
Why refactor after tests pass in TDD?
In Test-driven development, after making a failing test pass, why is refactoring the next important step?
ATo rewrite the tests to match the new code instead of the other way around
BTo add more features immediately without checking existing code
CTo remove all tests since the code works now
DTo improve code quality and maintainability without changing behavior, ensuring tests still pass
Attempts:
2 left
💡 Hint
Think about the purpose of refactoring in clean code practices.