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 <sahmed1...@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 <sahmed1...@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 <dchelim...@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@rubyforge.org >>> http://rubyforge.org/mailman/listinfo/rspec-users >>> >> >> >
_______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users