I'm following along in *The RSpec Book* <https://pragprog.com/book/achbd/the-rspec-book> on page 43
The book is careful to specify all the version of the gems it uses. My problem is likely I am using current gems. The code I downloaded looks like this #--- # Excerpted from "The RSpec Book", # published by The Pragmatic Bookshelf. # Copyrights apply to this code. It may not be used to create training material, # courses, books, articles, and the like. Contact us if you are in doubt. # We make no guarantees that this code is fit for any purpose. # Visit http://www.pragmaticprogrammer.com/titles/achbd for more book information. #--- class Output def messages @messages ||= [] end def puts(message) messages << message end end def output @output ||= Output.new end Given /^I am not yet playing$/ do end When /^I start a new game$/ do game = Codebreaker::Game.new(output) game.start end Then /^I should see "([^"]*)"$/ do |message| output.messages.should include(message) end The author says he's creating a "test double" with the lines class Output def messages @messages ||= [] end def puts(message) messages << message end end def output @output ||= Output.new end If I use the above code, RSpec will say Scenario: start game # features/codebreaker_starts_game.feature:7 Given I am not yet playing # features/step_definitions/codebreaker_steps.rb:34 When I start a new game # features/step_definitions/codebreaker_steps.rb:37 Then I should see "Welcome to Codebreaker!" # features/step_definitions/codebreaker_steps.rb:41 undefined method `messages' for #<RSpec::Matchers::BuiltIn::Output:0x0055e95ffb9728> (NoMethodError) ./features/step_definitions/codebreaker_steps.rb:44:in `/^I should see "([^"]*)"$/' features/codebreaker_starts_game.feature:10:in `Then I should see "Welcome to Codebreaker!"' And I should see "Enter guess:" # features/step_definitions/codebreaker_steps.rb:41 The "undefined method" message immediately above is not what the book says should be generated. If, on the other hand, I rename the method named output with output_ralph (see immediately below) # This works #--- # Excerpted from "The RSpec Book", # published by The Pragmatic Bookshelf. # Copyrights apply to this code. It may not be used to create training material, # courses, books, articles, and the like. Contact us if you are in doubt. # We make no guarantees that this code is fit for any purpose. # Visit http://www.pragmaticprogrammer.com/titles/achbd for more book information. #--- require "byebug" # byebug class Output def messages @messages ||= [] end def puts(message) messages << message end end # byebug def output_ralph # byebug @output ||= Output.new ret = @output # byebug ret end Given /^I am not yet playing$/ do end When /^I start a new game$/ do # byebug game = Codebreaker::Game.new(output_ralph) game.start end Then /^I should see "([^"]*)"$/ do |message| # output.messages.should include(message) # byebug # x = output_ralph.messages # byebug expect(output_ralph.messages).to include(message) end then I get the output the book says I should get (immediately below) Scenario: start game # features/codebreaker_starts_game.feature:7 Given I am not yet playing # features/step_definitions/codebreaker_steps.rb:34 When I start a new game # features/step_definitions/codebreaker_steps.rb:37 Then I should see "Welcome to Codebreaker!" # features/step_definitions/codebreaker_steps.rb:43 expected [] to include "Welcome to Codebreaker!" (RSpec::Expectations ::ExpectationNotMetError) ./features/step_definitions/codebreaker_steps.rb:49:in `/^I should see "([^"]*)"$/' features/codebreaker_starts_game.feature:10:in `Then I should see "Welcome to Codebreaker!"' And I should see "Enter guess:" # features/step_definitions/codebreaker_steps.rb:43 I suspect I have a name collision with *Class: RSpec::Matchers::BuiltIn::Output* <http://rspec.info/documentation/3.4/rspec-expectations/RSpec/Matchers/BuiltIn/Output.html> but I'm damned if I can figure out why. I guess I could leave the code as-is but ... advice would be appreciated. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscr...@googlegroups.com. To post to this group, send email to rubyonrails-talk@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/01a0184f-502b-42fb-af8d-8c6902ac3fd5%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.