title: Spying on a method with sinon. Method bound to event listener. Method was executed but .calledOnce is false?
body: <p>My code is functioning properly, but my test case is failing for one of its expectations. I don't understand why my spy fails to believe that a method has been executed.</p>
  
  <p>I bind an event listener like so:</p>
  
  <pre><code>var playlists = Backbone.Collection.extend({
      initialize: function(){
          this.on('add', this._onAdd);
      },
  
      //  Method:
      _onAdd: function (model, collection, options) {
          console.log('onAdd');
          this._foo();
      },
  
      _foo: function(){
          console.log('foo');
      }
  });
  
  Playlists = new playlists();
  </code></pre>
  
  <p>and I am using sinon to spy on my object:</p>
  
  <pre><code>it('should call _onAdd when adding a model to the collection', function() {
      sinon.spy(Playlists, '_onAdd');
      sinon.spy(Playlists, '_foo');
  
      Playlists.add({});
      expect(Playlists._onAdd.calledOnce).to.equal(true);
      expect(Playlists._foo.calledOnce).to.equal(true);
  
      Playlists._onAdd.restore();
      Playlist._foo.restore();
  });
  </code></pre>
  
  <p>My test case fails because the expectation for <code>_onAdd</code> being called once is not true. However, the expectation for <code>_foo</code> being called once <em>is</em> true.</p>
  
  <p>I am doing something incorrect with how I am spying on my event listener. Why does sinon not believe <code>_onAdd</code> has been called. How can I correct this?</p>