[mocha-developer] If I stub do I have to mock as well?

James Mead jamesmead44 at gmail.com
Fri Oct 13 13:03:17 EDT 2006


On 13/10/06, Tim Case <gk at karmacrash.com> wrote:
>
> Hi James, thanks for your help I installed mocha as a rails plugin from
> revision 70.
>
> the checkout action calls process order:
>
>
> def checkout
>     @order = Order.new_order(@store.bill_type.name, params[:order])
>     @customer = find_or_create_customer
>     @order.store = @store
>     @line_items = @cart.line_items
>     @order.line_items << @cart.line_items
>      if @order.valid? and @customer.valid?
>        process_order
>     else
>       append_to_order_errors @customer.errors
>       render_errors_in_order_summary
>      end
>   end
>
>   def process_order
>     if @order.process and @order.successful?    #<---This is what I want
> to stub
>       @cart.empty!
>       if customer_logged_in?
>         flash[:notice] = "Checkout was successful."
>       else
>         flash[:notice] = "Checkout was successful, and your account was
> created."
>       end
>       redirect_to_order_confirmation @order.id
>       return
>     else
>       render_errors_in_order_summary
>     end
>   end
>
> @order.successful? is what I would like to return a true when I specify
> it and at times false when I specify it.
>

Hi Tim,

I still can't see anything obviously wrong - although my brain is in Friday
afternoon mode. I've created a new Rails project and installed the same
version of the plugin as you and I've tried some simple tests to try and
replicate what you're seeing, but with no luck. I'm using version Rails
1.0.0 - what version are you using?

@order should be a real Order unless you are doing some other mocking out in
a setup() method. Do you have any other setup code? The error you are seeing
implies that @order is a mock object and not a real object - it is saying
that there has been an unexpected call to the successful? method. You can
generate the same error by doing something like this...

  def test_me
    order = mock()
    order.successful?
  end

But it should not be possible to get the same error on a real object.

I suggest you add the following line at the top of the process_order()
method...

  p @order

An then we can see whether its a mock or a real object.

The only other thing I can think of is that Mocha might not be clearing up
correctly after itself between tests. Do you get the same error if you
comment out all the other test methods in that TestCase?
-- 
James.
http://blog.floehopper.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://rubyforge.org/pipermail/mocha-developer/attachments/20061013/93898494/attachment.html 


More information about the mocha-developer mailing list