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! 💙

Top comments (0)