gpt4 book ai didi

javascript - 用 sinon stub 一个原型(prototype)方法

转载 作者:数据小太阳 更新时间:2023-10-29 04:15:51 25 4
gpt4 key购买 nike

假设我有以下方法:

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

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

现在在我的(mocha)测试中:

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

但是,这会将“refreshing”打印到控制台。有没有办法使用 sinon 来 stub 实时原型(prototype)?

最佳答案

我会这样做:

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

关于javascript - 用 sinon stub 一个原型(prototype)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27484502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com