Ich versuche, eine Methode mit sinon.js zu stubben, erhalte jedoch den folgenden Fehler:
Uncaught TypeError: Attempted to wrap undefined property sample_pressure as function
Ich ging auch zu dieser Frage ( Stubben und / oder Verspotten einer Klasse in sinon.js? ) Und kopierte und fügte den Code ein, aber ich erhalte den gleichen Fehler.
Hier ist mein Code:
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());
Hier ist die jsFiddle ( http://jsfiddle.net/pebreo/wyg5f/5/ ) für den obigen Code und die jsFiddle für die SO-Frage, die ich erwähnt habe ( http://jsfiddle.net/pebreo/9mK5d/1/). ).
Ich habe dafür gesorgt, dass sinon in die externen Ressourcen in jsFiddle und sogar in jQuery 1.9 aufgenommen wird. Was mache ich falsch?
quelle
.returns(0)
macht schon das gleiche wie.callFake(() => 0)
.returns
veraltet zu sein. sinonjs.org/releases/v3.0.0/stubs . @ danday74, bitte geben Sie die Referenz an..stub
mit einer Funktion als drittes Argument wird entfernt: github.com/sinonjs/sinon/blob/master/lib/sinon/stub.js#L17 An.returns
oder ist nichts falsch mit oder.callsFake
, also ist an dieser Antwort nichts falsch.Die Top-Antwort ist veraltet. Sie sollten jetzt verwenden:
Oder für statische Methoden:
Oder verwenden Sie für einfache Fälle einfach die Rückgabe:
Oder wenn Sie eine Methode für eine Instanz stubben möchten:
quelle
sinonjs
dhcallsFake()
darüber hinaus, für die älteren Versionen, wie kann dies veraltet sein?Ich bin auf denselben Fehler gestoßen, als ich versucht habe, eine Methode einer CoffeeScript-Klasse mit Sinon zu verspotten.
Bei einer Klasse wie dieser:
Sie können die Methode folgendermaßen durch einen Spion ersetzen:
Ersetzen Sie einfach
spy
mitstub
odermock
nach Bedarf.Beachten Sie, dass Sie durch die
assert.ok
Behauptung Ihres Testframeworks ersetzen müssen .quelle
Danke an @loganfsmyth für den Tipp. Ich konnte den Stub dazu bringen, an einer Ember-Klassenmethode wie dieser zu arbeiten:
quelle
Foo.prototype.constructor
, wo wie in der ursprünglichen AntwortSensor.prototype
. AndererseitsFoo.prototype.constructor
funktioniert das bei mir nicht. :)