Test First Ruby Performance Monitor Rspec Error

708 Views Asked by At

I'm starting the 06_performance_monitor exercise in TestFirst Ruby and the failure it lists is in the Rspec that was provided in the materials for TestFirst Ruby tutorial (where it says undefined method 'measure'). From what I've been able to find online, it seems this tutorial was written for Rspec 2 and Ruby 1.9. I currently have Rspec 2.99.0, Ruby 1.9.3, and Rake 0.9.22 installed. I guess my question is, what am I doing wrong/do I need different versions? I don't understand why the provided Rspec doesn't seem to work as it should. This happened in one other exercise for this tutorial but it was only a minor error message that didn't interfere with my testing.

caitlyns-mbp:06_performance_monitor caitlynyu$ rake
(in /Users/caitlynyu/Desktop/learn_ruby)
Run options: include {:focus=>true}

All examples were filtered out; ignoring {:focus=>true}

Performance Monitor
  runs a block N times (FAILED - 1)

Failures:

  1) Performance Monitor runs a block N times
     Failure/Error: measure(4) do
     NoMethodError:
       undefined method `measure' for #<RSpec::Core::ExampleGroup::Nested_1:0x007fcdc11b8578>
     # ./06_performance_monitor/performance_monitor_spec.rb:53:in `block (2 levels) in <top (required)>'

Finished in 0.00081 seconds
1 example, 1 failure

Failed examples:

rspec ./06_performance_monitor/performance_monitor_spec.rb:51 # Performance Monitor runs a block N times

Randomized with seed 2933

/Users/caitlynyu/.rvm/rubies/ruby-1.9.3-p547/bin/ruby -S rspec /Users/caitlynyu/Desktop/learn_ruby/06_performance_monitor/performance_monitor_spec.rb -I/Users/caitlynyu/Desktop/learn_ruby/06_performance_monitor -I/Users/caitlynyu/Desktop/learn_ruby/06_performance_monitor/solution -f documentation -r ./rspec_config failed
caitlyns-mbp:06_performance_monitor caitlynyu$ 

UPDATE

My code below (I know it doesn't pass any of the tests below, I was just playing around with this first):

def performance_monitor
  start = Time.now
  yield
  return "#{Time.now - start}"
end

I've never used a method called 'measure' that shows up in the Rspec which is below:

# # Topics
#
# * stubs
# * blocks
# * yield
#
# # Performance Monitor
#
# This is (a stripped down version of) an actual useful concept: a
# function that runs a block of code and then tells you how long it
# took to run.

require "performance_monitor"

require "time"  # loads up the Time.parse method -- do NOT create time.rb!

describe "Performance Monitor" do
  before do
    @eleven_am = Time.parse("2011-1-2 11:00:00")
  end

  it "takes about 0 seconds to run an empty block" do
    elapsed_time = measure do
    end
    elapsed_time.should be_within(0.1).of(0)
  end

  it "takes exactly 0 seconds to run an empty block (with stubs)" do
    Time.stub(:now) { @eleven_am }
    elapsed_time = measure do
    end
    elapsed_time.should == 0
  end

  it "takes about 1 second to run a block that sleeps for 1 second" do
    elapsed_time = measure do
      sleep 1
    end
    elapsed_time.should be_within(0.1).of(1)
  end

  it "takes exactly 1 second to run a block that sleeps for 1 second (with stubs)" do
    fake_time = @eleven_am
    Time.stub(:now) { fake_time }
    elapsed_time = measure do
      fake_time += 60  # adds one minute to fake_time
    end
    elapsed_time.should == 60
  end

  it "runs a block N times" do
    n = 0
    measure(4) do
      n += 1
    end
    n.should == 4
  end

  it "returns the average time, not the total time, when running multiple times" do
    run_times = [8,6,5,7]
    fake_time = @eleven_am
    Time.stub(:now) { fake_time }
    average_time = measure(4) do
      fake_time += run_times.pop
    end
    average_time.should == 6.5
  end

  it "returns the average time when running a random number of times for random lengths of time" do
    fake_time = @eleven_am
    Time.stub(:now) { fake_time }
    number_of_times = rand(10) + 2
    average_time = measure(number_of_times) do
      delay = rand(10)
      fake_time += delay
    end
    average_time.should == (fake_time - @eleven_am).to_f/number_of_times
  end

end
0

There are 0 best solutions below