DEV Community

Cover image for Tests Everywhere - Ruby
Roger Viñas Alcon
Roger Viñas Alcon

Posted on • Edited on

Tests Everywhere - Ruby

GitHub logo rogervinas / tests-everywhere

🤠 Tests, Tests Everywhere!

Ruby testing this simple Hello World with RSpec

Show me the code

Implementation

  1. Create HelloMessage class in HelloMessage.rb:
class HelloMessage
  def text
    @text = "Hello World!"
  end
end
Enter fullscreen mode Exit fullscreen mode
  1. Create HelloConsole class in HelloConsole.rb:
class HelloConsole
  def print(text)
    puts text
  end
end
Enter fullscreen mode Exit fullscreen mode
  1. Create HelloApp class in HelloApp.rb:
class HelloApp
  def initialize(message, console)
    @message = message
    @console = console
  end

  def printHello
    @console.print(@message.text)
  end
end
Enter fullscreen mode Exit fullscreen mode
  1. Create main function in Main.rb that wraps it all together:
message = HelloMessage.new
console = HelloConsole.new
app = HelloApp.new message, console
app.printHello
Enter fullscreen mode Exit fullscreen mode

Test

Following RSpec Core and RSpec Mocks guides ...

  1. Test HelloMessage in HelloMessage_spec.rb:
RSpec.describe HelloMessage do
  it "should return hello world" do
    message = HelloMessage.new
    expect(message.text).to eq("Hello World!")
  end
end
Enter fullscreen mode Exit fullscreen mode
  1. Test HelloApp in HelloApp_spec.rb:
RSpec.describe HelloApp do
  it "should print hello message" do
    messageText = "Hello Test!"

    # 2.1 Create a mock of HelloMessage
    # that will return "Hello Test!" whenever text is called
    message = instance_double("HelloMessage", :text => messageText)

    # 2.2 Create a mock of HelloConsole
    console = instance_double("HelloConsole")
    # 2.3 Expect print to be called once with "Hello Test!"
    expect(console).to receive(:print).once.with(messageText)

    # 2.4 Create a HelloApp, the one we want to test, passing the mocks
    app = HelloApp.new message, console
    # 2.5 Execute the method we want to test
    app.printHello

    # Expectation 2.3 will be checked once test ends
  end
end
Enter fullscreen mode Exit fullscreen mode
  1. Test output should look like:
HelloApp
  should print hello message

HelloMessage
  should return hello world

Finished in 0.00457 seconds (files took 0.05704 seconds to load)
2 examples, 0 failures
Enter fullscreen mode Exit fullscreen mode

Happy Testing! 💙

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

AWS Security LIVE!

Hosted by security experts, AWS Security LIVE! showcases AWS Partners tackling real-world security challenges. Join live and get your security questions answered.

Tune in to the full event

DEV is partnering to bring live events to the community. Join us or dismiss this billboard if you're not interested. ❤️