1

Excuse if this is a silly question, I am new to mocking.

I am able to use mocha to do things like:

person.expects(:first_name).returns('David')

How can I mock a nested object?

Say I have a Product that belongs to a Person and I want to get the first name of that person.

In my app I might do it like this:

product.person.first_name

How would I get the same result using a mock?

Vega
  • 27,856
  • 27
  • 95
  • 103

2 Answers2

2

you need define a mock() before and return it when you call person on product


person = mock(:first_name => 'david')
product.expects(:person).return(person)

product.person #=> mockObject
product.person.first_name #=> david
shingara
  • 46,608
  • 11
  • 99
  • 105
2

as an alternative to shingara's answer, you could use mocha's any_instance method "which will detect calls to any instance of a class".

Person.any_instance.expects(:first_name).returns('david')

it's documented at:
http://mocha.rubyforge.org/classes/Mocha/ClassMethods.html#M000001

rubiii
  • 6,903
  • 2
  • 38
  • 51