[rspec-users] Rspec 2 expectations matching what is received, but failing

thoen thoen at edgevaleinteractive.com
Fri Feb 17 16:06:48 UTC 2012


I noticed a couple of similar posts (such as
http://groups.google.com/group/rspec/browse_thread/thread/81554bd8ad0b03a3/ed61a787c00dd601?lnk=gst&q=received+expected+is+the+same+as+got#ed61a787c00dd601),
but they didn't seem to have the same situation I have.

Also, I apologize in advance for posting a question that is likely a
simple syntax error or similar that I just don't see.

I am receiving the following error:

Failures:

  1) SignUpObserver#after_create callback for a volunteer with an
email address delivers a 'new sign up' email to the event owner
     Failure/Error: subject { sign_up_observer.after_create(sign_up) }
       <SignUpMailer (class)> received :new_sign_up_owner with
unexpected arguments
         expected: (#<SignUp:0x83a54640 @name="SignUp_1005">, )
              got: (#<SignUp:0x83a54640 @name="SignUp_1005">, )
     # ./app/models/sign_up_observer.rb:4:in `after_create'
     # ./spec/models/sign_up_observer_spec.rb:13:in `block (3 levels)
in <top (required)>'
     # ./spec/models/sign_up_observer_spec.rb:25:in `block (4 levels)
in <top (required)>'

For this spec
describe SignUpObserver do
  let(:event_owner) { mock_model(Person, :email =>
'event_owner at test.host').as_null_object }
  let(:event) { mock_model(Event, :owner =>
event_owner).as_null_object }
  let(:volunteer) { mock_model(Person, :email =>
volunteer_email).as_null_object }
  let(:volunteer_opportunity)
{ mock_model(VolunteerOpportunity, :event => event, :title =>
'volunteer opportunity title').as_null_object }
  let(:sign_up) { mock_model(SignUp, :assigner => event_owner, :person
=> volunteer, :volunteer_opportunity => volunteer_opportunity) }
  let(:sign_up_observer) { SignUpObserver.instance }

  describe '#after_create callback' do
    subject { sign_up_observer.after_create(sign_up) }

    context 'for a volunteer with an email address' do
      let(:volunteer_email) { 'email at test.host' }

      it "delivers a 'new sign up' email to the event owner" do
        mock = mock(:emailer)
        SignUpMailer.should_receive(:new_sign_up_owner).with(sign_up,
event_owner).and_return(mock)
        mock.should_receive(:deliver)
        subject
      end

      it "delivers a 'new sign up' email to the person signing up" do
        should_send_kind_of_sign_up_email_to(:new_sign_up_signee,
sign_up, volunteer)
        subject
      end
    end
 end
end

in SignUpObserver

  def after_create(sign_up)
    SignUpMailer.new_sign_up_signee(sign_up, sign_up.person).deliver
if sign_up and sign_up.person and !sign_up.person.email.blank?
    SignUpMailer.new_sign_up_owner(sign_up,
sign_up.volunteer_opportunity.event.owner)
  end

So there are two things I can't get my head around. The first is the
expectation matching what I got. The second is the second parameter
(event_owner) seems to be nil. I have checked it using debugger and it
is not nil.

I am upgrading from Rails 2.3.14 to rails 3.0.10. It passes in 2.3.14
I am using Rspec 2.8

Your gentle advice is greatly appreciated.

Tom


More information about the rspec-users mailing list