Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mocha : How do you set up an expectation for an instance method?

Assume this ruby code:

class User
  def self.failed_login!(email)
    user = User.find_by_email(email)
    if user
      user.failed_login_count = user.failed_login_count + 1
      user.save
    end
  end
end

I want to write a test that tests that user.save is never called when an invalid email is given. E.g.:

it "should not increment failed login count" do
   User.expects(:save).never()
   User.failed_login!("doesnotexist")
end

This test currently passes, but it also passes when I provide a valid email address.

How do I set up the expectation using Mocha? (or any other mocking framework) such that it tests the save method of any User instance is never called?

(preferably without stubbing/mocking the find_by_email method, as the implementation of how to get the user might change in the future)

Cheers

like image 714
Jim Soho Avatar asked Nov 28 '22 12:11

Jim Soho


1 Answers

For others that might have stumbled unto this, I found the answer in another post that was dealing with RR as the mocking framework... in Mocha you can do this:

User.any_instance.expects(:save).never()
like image 116
Jim Soho Avatar answered Dec 06 '22 00:12

Jim Soho