Я пытаюсь заглушить метод с помощью sinon.js, но получаю следующую ошибку:
Uncaught TypeError: Attempted to wrap undefined property sample_pressure as function
Я также перешел к этому вопросу ( заглушка и / или издевательство над классом в sinon.js? ), Скопировал и вставил код, но получаю ту же ошибку.
Вот мой код:
Sensor = (function() {
// A simple Sensor class
// Constructor
function Sensor(pressure) {
this.pressure = pressure;
}
Sensor.prototype.sample_pressure = function() {
return this.pressure;
};
return Sensor;
})();
// Doesn't work
var stub_sens = sinon.stub(Sensor, "sample_pressure").returns(0);
// Doesn't work
var stub_sens = sinon.stub(Sensor, "sample_pressure", function() {return 0});
// Never gets this far
console.log(stub_sens.sample_pressure());
Вот jsFiddle ( http://jsfiddle.net/pebreo/wyg5f/5/ ) для указанного выше кода и jsFiddle для упомянутого мной вопроса SO ( http://jsfiddle.net/pebreo/9mK5d/1/ ).
Я обязательно включил sinon во внешние ресурсы в jsFiddle и даже jQuery 1.9. Что я делаю не так?
источник
.returns(0)
уже делает то же самое, что и.callFake(() => 0)
.returns
это устарело. sinonjs.org/releases/v3.0.0/stubs . @ danday74, дайте ссылку..stub
с функцией, поскольку третий аргумент удален: github.com/sinonjs/sinon/blob/master/lib/sinon/stub.js#L17 Нет ничего плохого в.returns
или.callsFake
, поэтому нет ничего плохого в этом ответе.Верхний ответ устарел. Теперь вы должны использовать:
Или для статических методов:
Или для простых случаев просто используйте возвраты:
Или, если вы хотите заглушить метод для экземпляра:
источник
sinonjs
то есть,callsFake()
более того, для более старых версий, как это можно исключить?Я столкнулся с той же ошибкой, пытаясь имитировать метод класса CoffeeScript с помощью Sinon.
Учитывая такой класс:
Вы можете заменить его метод на шпион следующим образом:
Просто замените
spy
наstub
или поmock
мере необходимости.Обратите внимание, что вам нужно будет заменить
assert.ok
любое утверждение, которое есть в вашей среде тестирования.источник
Спасибо @loganfsmyth за подсказку. Мне удалось заставить заглушку работать с методом класса Ember следующим образом:
источник
Foo.prototype.constructor
, где, как в оригинальном ответе, естьSensor.prototype
. Опять же,Foo.prototype.constructor
у меня не работает. :)