[rspec-users] Fwd: Issue with AR::Base descendants with certain argument

Alexey Ilyichev bluesman.alex at gmail.com
Thu Oct 28 05:40:02 EDT 2010

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)

    def self.present_method(arg)

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

  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*'

  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*'

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


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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20101028/dd5fb489/attachment.html>

More information about the rspec-users mailing list