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