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

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


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/e760f724/attachment-0001.html>


More information about the rspec-users mailing list