Я пытаюсь заглушить компонент React для целей тестирования:
var Comp = React.createClass({
displayName: "Comp",
plop: function() {
console.log("plop");
},
render: function() {
this.plop();
return React.DOM.div(null, "foo");
}
});
var stub = sinon.stub(Comp.type.prototype, "plop");
React.addons.TestUtils.renderIntoDocument(Comp());
sinon.assert.called(stub); // throws
Это, к сожалению, печатает "plop" на консоли... и утверждение терпит неудачу.
Примечание. Непосредственно опускание метода объекта спецификации работает, но затем вам нужно экспортировать конструктор компонента и спецификацию отдельно, чтобы они оба были доступны в тестах... Кроме того, вам нужно будет заглушить спецификацию до создания компонента класс; не очень удобно:
var CompSpec = {
displayName: "Comp",
plop: function() {
console.log("plop");
},
render: function() {
this.plop();
return React.DOM.div("foo");
}
};
var stub = sinon.stub(CompSpec, "plop");
var Comp = React.createClass(CompSpec);
React.addons.TestUtils.renderIntoDocument(Comp());
// plop() is properly stubbed, so you can
sinon.assert.called(stub); // pass
Можете ли вы придумать еще одну стратегию, чтобы легко заглушить метод компонента React?