On Jul 25, 2008, at 12:32 AM, Matt Lins wrote:
I suppose the way I'm defining the stubs, differs from what Dave is doing in his example. I assumed that: MyModel = mock('MyModel Class', :count => 1) was the same as: MyModel.stub!(:count).and_return(1)
Nope. Not even close. Here's an equivalent of the first form: Object.send :remove_const, :MyModel MyModel = <a mock object> and here's the second form: MyModel.instance_eval do def count 1 end end (or:) MyModel.class_eval do class << self def count; 1; end end end Scott
But, I'm starting to think they are not. I haven't looked at the rSpec internals to verify, other than the parameter name: stubs_and_options+ lets you assign options and stub values at the same time. The only option available is :null_object. Anything else is treated as a stub value. So, is this problem?
Yeah - so here are two related, but not equivalent ideas: mock objects, and stubs. A stub is just a faked out method - it can exist on a mock object (a completely fake object), or on a partial mock (i.e. a real object, with a method faked out). mock('My mock") is a mock object, MyRealObject.stub!(:foo) is a real object with the method foo faked out.
What is the difference between a mock object and a fake object? A mock object will complain (read: raise an error) any time it receives a message which it doesn't understand (i.e. one which hasn't been explicitly stubbed). A real object will work as usual. (A null object mock is a special type of mock - one which never complains. For now, you shouldn't worry about it).
Hope this helps, Scott _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users