[rspec-users] Stubbing times: #from_now et al.

David Chelimsky dchelimsky at gmail.com
Wed Nov 5 14:42:47 EST 2008

On Wed, Nov 5, 2008 at 12:51 PM, Nick Hoffman <nick at deadorange.com> wrote:
> I had a look around for how to stub Time.now , #from_now , etc, and came
> across this, which was useful:
> http://devblog.michaelgalero.com/2007/11/23/actioncontroller-rspec-stub-timenow/
> Unfortunately, my situation is slightly different, and causes that solution
> to not be applicable. This is what I'm trying to spec:
> def remember_me_for(time)
>  remember_me_until time.from_now.utc
> end
> I thought this would work:
> it 'should remember a user for a period of time' do
>  user          = create_user
>  one_week      = 1.week
>  from_now      = 1.week.from_now
>  from_now_utc  = 1.week.from_now.utc
>  one_week.stub!(:from_now).and_return from_now
>  from_now.stub!(:utc).and_return from_now_utc
>  user.should_receive(:remember_me_until).with from_now_utc
>  user.remember_me_for one_week
> end
> But that fails, referencing the stub on "one_week":
> TypeError in 'User should remember a user for a period of time'
> no virtual class for Fixnum
> Any suggestions for how to solve this? Thanks!

Looks like you can't stub anything on a Fixnum because of the way
RSpec's mocking works.

>> require 'spec/mocks'
=> true
>> 1.stub!(:foo)
TypeError: no virtual class for Fixnum

Same with mocha, apparently.

>> require 'mocha'
=> true
>> 1.stubs(:foo)
TypeError: no virtual class for Fixnum

Same with rr:

>> require 'rr'
=> true
>> mock(1).foo
TypeError: no virtual class for Fixnum

And lastly (but not leastly), flexmock:

>> require 'flexmock'
>> include FlexMock::MockContainer
=> Object
>> flexmock(1).foo
TypeError: no virtual class for Fixnum

The problem is there is no Singleton Class for 1, probably an
efficiency in Ruby since 1 is, itself, a Singleton.

All of these frameworks try to manipulate methods on the object's
singleton class. So no mocking/stubbing on Fixnums. Apparently.

Not much help - sorry.


> Nick

More information about the rspec-users mailing list