I have made 2 examples for this and I can't figure out how to make both
pass. Take a look please:

require 'spec_helper'

describe "Mock" do
  class A
    def self.method_missing(name, *args, &block)
      '*a_method_missing*'
    end

    def self.present_method(arg)
      '*present_method*'
    end
  end

  class B < A
    def self.method_missing(name, *args, &block)
      '*b_method_missing*'
    end
  end

  it 'should call derived class method_missing when args differ from what is
stubbed' do
    B.stub!(:missing_method).with(1).and_return '*stub*'
    B.missing_method(2).should == '*b_method_missing*'
  end

  it 'should call present_method when it is defined in parent class and args
differ from what is stubbed' do
    B.stub!(:present_method).with(1).and_return '*stub*'
    B.present_method(2).should == '*present_method*'
  end
end

---------- Forwarded message ----------
From: Alexey Ilyichev <bluesman.a...@gmail.com>
Date: Thu, Oct 28, 2010 at 12:44 PM
Subject: Issue with AR::Base descendants with certain argument
To: rspec-users@rubyforge.org


Hi!

I am trying to upgrade rspec-rails to 1.3.3, and one of my specs fails.

In before :each I stub finder method like this:
Payment.stub!(:find_by_id).with(@payment.id.to_s).and_return @payment
Payment class is derived from AR::Base

And then in one of the examples I call Payment.find_by_id((@payment.id +
1).to_s), and I am expecting it to return null, as it used to with 1.2.9
version, however it leads to an exception in active_record/base.rb.
Analyzing the stack trace I figured that in line 115 of mock/proxy.rb method
find_by_id is called for ActiveRecord::Base, which is not correct.

I'm not familiar with rspec internals, so I don't have an idea on where in
code the actual problem is. So any help would be greatly appreciated.
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to