[rspec-users] "user" received unexpected message :created_at with (no args)

S Ahmed sahmed1020 at gmail.com
Wed Jun 29 15:20:20 EDT 2011


Oh and I am grateful for your refactoring and explanations, simplies my code
and tests (and understanding!)

On Wed, Jun 29, 2011 at 3:19 PM, S Ahmed <sahmed1020 at gmail.com> wrote:

> Ok I got it working, and honestly I have no idea why it is working.
>
> There was a test below it which I modified (I had updated_at instead of
> created_at).
>
> I ALMOST feel as if the file was cached and not looking at the right file,
> but not sure if that is even possible.
>
>
> On Wed, Jun 29, 2011 at 3:07 PM, S Ahmed <sahmed1020 at gmail.com> wrote:
>
>> Your code worked, let me try and figure out why mine isn't working....
>>
>> Your right it isn't exactly what I have, but pretty much everything is
>> identical except for the naming of the model.
>>
>>
>> On Wed, Jun 29, 2011 at 2:20 PM, David Chelimsky <dchelimsky at gmail.com>wrote:
>>
>>> On Jun 29, 2011, at 12:21 PM, S Ahmed wrote:
>>>
>>> > My method looks like:
>>> >
>>> > def self.can_do_this(user)
>>> >   return false if user.nil?
>>> >   (  (Time.now >= user.created_at) ? true : false  )
>>> > end
>>> >
>>> > my spec:
>>> >
>>> > it "should allow you to do this" do
>>> >   user = stub("user")
>>> >   user.stub(:nil?).and_return(false)
>>> >   user.stub(:created_at).and_return(Time.now)
>>> >
>>> >   res = User.can_do_this(user)
>>> >   res.should == true
>>> > end
>>> >
>>> > Running the spec I get:
>>> >
>>> > Failer/Error: res = User.can_do_this(user)
>>> > Stub "user" received unexpected message :created_at with (no args)
>>> >
>>> > Any ideas?
>>>
>>> I copied what you have as/is and added the User class and example group
>>> declarations:
>>>
>>> class User
>>>   def self.can_do_this(user)
>>>    return false if user.nil?
>>>    (  (Time.now >= user.created_at) ? true : false  )
>>>  end
>>> end
>>>
>>> describe User do
>>>   it "should allow you to do this" do
>>>    user = stub("user")
>>>    user.stub(:nil?).and_return(false)
>>>    user.stub(:created_at).and_return(Time.now)
>>>
>>>    res = User.can_do_this(user)
>>>    res.should == true
>>>  end
>>> end
>>>
>>> This passes, so either something is different about our environments or
>>> there is more going on than you are showing us. Please copy what I wrote
>>> above into its own file and run it and let us know if it passes or fails.
>>>
>>> Off topic, some recommendations about the Ruby in your example:
>>>
>>> 1. user.stub(:nil?).and_return(false) is unnecessary. It is an object and
>>> it will return false to nil?.
>>> 2. you can declare a method stub in the declaration of the stub object:
>>>
>>>  user = stub("user", :created_at => Time.now)
>>>
>>> 3. Asking an object if it is nil is unnecessary noise AND an unnecessary
>>> method call. This would be more terse and faster (as the evaluation happens
>>> in C in MRI, Java in JRuby, etc):
>>>
>>>  return false unless user
>>>
>>> 4. A ternary that returns true or false is redundant. These two
>>> expressions are functionally equivalent:
>>>
>>> (Time.now >= user.created_at) ? true : false
>>> Time.now >= user.created_at
>>>
>>> 5. Given #3 and #4, the implementation of can_do_this can be reduced to:
>>>
>>>  user && Time.now >= user.created_at
>>>
>>> With those recommendations, the whole example can be reduced to:
>>>
>>> class User
>>>   def self.can_do_this(user)
>>>     user && Time.now >= user.created_at
>>>  end
>>> end
>>>
>>> describe User do
>>>   it "should allow you to do this" do
>>>     user = stub("user", :created_at => Time.now)
>>>    User.can_do_this(user).should be_true
>>>  end
>>> end
>>>
>>> We could talk about can_do_this wanting a "?" at the end, but my
>>> suspicion is that is not the real example you are working from.
>>>
>>> HTH,
>>> David
>>> _______________________________________________
>>> rspec-users mailing list
>>> rspec-users at rubyforge.org
>>> http://rubyforge.org/mailman/listinfo/rspec-users
>>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20110629/930518d5/attachment.html>


More information about the rspec-users mailing list