2014-12-15 16 views
5

Powiedzmy mam następujące metody:stubbing metodę prototyp z Sinon

Controller.prototype.refresh = function() { 
    console.log('refreshing'); 
} 

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

teraz w moim (mocca) badania:

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); 
}); 

To jednak drukuje „odświeżenia” do konsoli . Czy istnieje sposób na wykorzystanie sinona, aby zablokować żywy prototyp?

+0

on pracował dla mnie: http://jsfiddle.net/b36u47jq/. W twoim wierszu deklaracji/definicji kodu 'var object =' brakuje nawiasu klamrowego - czy to może być problem? – psquared

Odpowiedz

3

ten sposób byłoby to zrobić:

describe('test', function() { 
    before(function() { 
    // stub the prototype's `refresh` method 
    sinon.stub(Controller.prototype, 'refresh'); 
    this.object = { 
     id: 1, 
     delete: function (options, callback) { callback(); } 
    }; 
    // spy on the object's `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); 
    }); 
}); 
Powiązane problemy