Question

I have address method which instantiates a new class and returns some information.

class Office  
  attribute :id
  def address
    info = Services::Employee.new
    info.contact = [contact]
    info.id = id

    info
  end
end

Now in the above address method contact(one inside an array) is another method which returns a bunch of things.

Now in my rspec test I just want to say the info.contact returns [contact] without actually testing it with data. I read about should_receive but i am not sure how to test the above method using should_receive.

Here is what I tried:

info = Employee.deserialize(JSON.parse(info.to_json))
it 'returns info' do
  Employee.should_receive(:info.contact).and_return('[contact]')
  expect(helper.address).to eq(info)
end

I got this error:

   expected: 1 time with any arguments
   received: 0 times with any arguments
Was it helpful?

Solution

It looks like info is an instance of Employee within your test. Therefore it is Employee which receives the message contact.

Try changing your test such that the should_receive is placed on Employee directly:

Employee.any_instance.should_receive(:contact).and_return('[contact]')

OTHER TIPS

Services::Employee,.any_instance.should_receive(:contact=) {|value|
  value.should eq <expected_value>
  <expected_value>
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top