[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