Prototype stabilization with Sinon

Let's say I have the following methods:

Controller.prototype.refresh = function () { console.log('refreshing'); } Controller.prototype.delete = function (object) { var self = this; object.delete({id: object.id}, function () { self.refresh(); }); } 

now in my (mocha) test:

 beforeEach(function () { var controller = new Controller(); var proto = controller.__proto__; var object = {id: 1, delete: function (options, callback) { callback (); }; sinon.stub(proto, 'refresh', function {console.log('refreshing stub')}); controller.delete(object); }); it('doesnt work', function () { expect(object.delete.callCount).to.equal(1); expect(proto.refresh.callCount).to.equal(1); }); 

This, however, prints an β€œupdate” to the console. Is there a way to use synon to drown out a live prototype?

+5
source share
1 answer

Here's how I do it:

 describe('test', function() { before(function() { // stub the prototype `refresh` method sinon.stub(Controller.prototype, 'refresh'); this.object = { id: 1, delete: function (options, callback) { callback (); } }; // spy on the object `delete` method sinon.spy(this.object, 'delete'); }); beforeEach(function () { // do your thing ... this.controller = new Controller(); this.controller.delete(this.object); }); after(function() { // restore stubs/spies after I'm done Controller.prototype.refresh.restore(); this.object.delete.restore(); }); it('doesnt work', function () { expect(this.object.delete.callCount).to.equal(1); expect(this.controller.refresh.callCount).to.equal(1); }); }); 
+3
source

Source: https://habr.com/ru/post/1209103/


All Articles